草庐IT

c++ - std::multiset<int> 与 std::map<int, std::size_t> 用于保持多个可重复整数值

我想创建一个记录来保存关于的信息a)存在什么样的元素,b)出现的每种元素的数量在树的一个节点中。我会明确地只为叶节点存储这些信息,而父节点的信息可以通过组合它所有子节点的信息来获得(例如,子节点1有3个A对象,1个B对象,子节点2有1个A的对象,C的2个对象--parent有4个A的对象,1个B的对象和2个C的对象)。从父节点请求此信息时,我会小心不要先请求、使用和丢弃子节点的信息,然后再为其父节点请求,但是向上构造将是一个常见的手术。其他两个常见操作直接源self存储的内容:是否存在类型X的对象?和存在多少类型X的对象?还有如何存在多种对象?对象种类以整数表示,对象编号始终为整数值。

c++ - 用于积分的 std::numeric_limits<T>::epsilon()

关于std::numeric_limits我没有任何好的引用,但网上的网站说std::numeric_limits::epsilon()将返回1之间的差异和它之后的最小数字。据我所知int类型,1之后的下一个数字是2,所以epsilon应该是1.但它是0(Linux,g++4.4.5)。这背后的原因是什么?我知道在实践中epsilon()仅对浮点类型有用,我只是吹毛求疵。 最佳答案 标准说([numeric.limits.members])Meaningfulforallfloatingpointtypes.标准还说([numeri

c++ - 排序中的 < 运算符断言无效

我正在尝试实现一个简单的比较器,用于根据数组“_vec”中的值对索引进行排序。我收到“无效classCompare{vector&_vec;public:Compare(vector&vec):_vec(vec){}booloperator()(size_ti,size_tj){if(_vec[i]!=_vec[j])return_vec[i]我正在使用以下函数调用:sort(inds.begin(),inds.end(),Compare(vals));其中inds只是一个包含从1到15(比如说)的索引的数组,而vals是长度为15的数组,其中包含一些我想要计算其排序索引的值。总体目标

c++ - 为什么 std::packaged_task<void()> 无效?

使用MSVC2012,下面的代码将按预期编译和运行std::packaged_tasktask([]()->int{std::cout而下面的代码会编译运行失败std::packaged_tasktask([](){std::cout为什么会这样?编辑:作为解决方法,可以使用std::promise在返回void的函数上获取std::futurestd::promisepromise;autofuture=promise.get_future();std::threadthread([](std::promise&p){std::cout请注意,在vs2012库中有一个std::thr

c++ - std::is_signed<T> 和 std::numeric_limits<T>::is_signed 之间的区别?

两者都是std::is_signed和std::numeric_limits::is_signed应该给出关于T的签名的答案.为什么现在有两个符号指示符(即自C++11起)? 最佳答案 我敢猜测唯一的区别是如果std::numeric_limits专门用于用户定义的类型。这样的用户定义类型当然可以为is_signed提供自己的值。.但要求std::is_signed::value在这种类型上将始终返回false除非std::is_signed已独立特化。似乎std::is_signed的条件代表是is_arithmetic::val

c++ - 最大数 < x?

在C++中,假设我有一个数字x类型T它可以是整数或浮点类型。我想找到最大的数y类型T为此y持有。该解决方案需要模板化以透明地处理整数和float。您可以忽略x的边缘情况已经是T中可以表示的最小数字.可能的用例:这个问题被标记为过于本地化,因此我想提供一个我认为更通用的用例。请注意,我不是OP的原作者。考虑这个结构:structlower_bound{lower_bound(doublevalue,boolopen):value(open?value+0.1:value){}doublevalue;booloperator()(doublex){returnx>=value;}};此类模

c++ - std::pair<U,V> 对齐控制

我注意到在尝试将std::pair保存到二进制文件中时发生了一件令人不快的事情:std::pair与单词对齐。它在处理器效率方面可能很有用,但需要更多存储空间,所以我想将std::pair的对齐模式切换为1字节。我的编译器是MSVC++2012。#includeintmain(){structS_a{doublea;size_tb;};#pragmapack(1)structS_wa{doublea;size_tb;};std::cout)))我试过了,但是没用:#pragmapack(1)typedefstd::pairQ;std::cout 最佳答案

c++ - 如何将 Rcpp::List 转换为 std::vector<double>

我是R语言领域的新手,但我需要在我的C++代码中通过irlba计算奇异值分解。为此,我使用RInside库。RInsideR(argc,argv);std::stringcmd="S现在我需要将带有奇异vector的Rcpp::List的结果转换为std::vector问题:将执行svd的结果转换为std::vector的最佳方法是什么?如何将写为std::vector的输入矩阵转换为适合将其用作irlba中svd函数的输入参数的格式? 最佳答案 要从C++类型转换为R对象,您可以使用wrap.我通常构造NumericMatrix的

c++ - reinterpret_cast<> 和可移植性

我读过reinterpret_cast如果使用不当可能会很危险。所以我相信我使用得当;)。我发现如果我有模板类并且需要类型转换,那么使用它会很好。但最近我读到reinterpret_cast也是不可携带的。我为这一点感到难过。什么原因?拿下面的代码,voidDisp(int*val){for(inti=0;i(arr);for(unsignedchar*i=ptr;i现在输出:117421487232767419678905683925845841967200000000000000Machinetype:Linux2.6.32-358.11.1.el6.x86_64#1x86_64x

c++ - 有没有比 vector< vector< T>> 更自然的方式来表示 T 的矩阵?

上下文:我正在尝试学习C++(同时阅读一些stackoverflow社区推荐的书籍),我决定尝试制作一个具有基本功能的元胞自动机程序,只是为了学习(并且因为它对我来说很有趣)。问题:有没有比使用vector>更自然的方式来表示Cell元素的矩阵?我正在标准库或其他一些流行的库中寻找潜在的替代品。关于性能的评论将不胜感激。我在使用vectorofvectors时没有遇到问题,在语法上也没有问题,我只是想知道替代方案。因为我没有经验,所以每次我写一些代码时,我都会想可能有很多我自己找不到的更直接的方法。这是我的第一个问题,所以如果我做了一些违反问题指南的事情,我将非常感谢你指出这一点。有用