草庐IT

EidosValue_Int_vector

全部标签

c++ - 将 std::function<int(int)> 赋值给 std::function<const int&(const int& x)>

以下代码编译但在VC++2015(发行版)中产生未定义的输出和运行时错误othercompilers.#include#includeintmain(){std::functionf=[](intx){returnx;};std::functiong=f;std::cout为什么赋值g=f;是允许的? 最佳答案 考虑重写等效代码以避免lambda或std::function:intf(intx){returnx;}intconst&g(intconst&x){returnf(x);}这是一个结构良好的代码,尽管如此,它仍会返回一个对

C++11 在 map<key, value> 中为值(int 和 string)存储多种数据类型的最简单方法?

我想要一个使用的map键字符串值的整数或字符串像这样:std::mapmyMap;myMap["first_key"]=10;myMap["second_key"]="stringValue";做这种事情的最简单方法是什么?已添加)我正在寻找适用于C++11的解决方案 最佳答案 在c++17中,你可以使用std::variant,在此之前,您可以使用boost中的那个:usingIntOrString=std::variant;std::mapmyMap;myMap["first_key"]=10;myMap["second_key

c++ - std::vector<>::emplace_back() 中的异常安全吗?

在std::vector::emplace_back()中抛出异常时会发生什么?例如:classFoo{public:Foo(intbar){if(bar==4)throwstd::exception("Somethingwentwrong");}}和std::vector>foo_list;foo_list.emplace_back(newFoo(3));try{foo_list.emplace_back(newFoo(4));}catch(std::exceptionerror){//Howbadisit?}//Whatsinsidefoo_listnow?我希望vector只包含

c++ - vector move 构造函数比复制构造函数慢

我正在开发我的第一个C++项目,它是一个CSV解析器(fullsourcecodehere)。它正处于工作状态,现在我想进行基本的重构/提高性能。目前解析器的工作方式是将每一行作为std::vector返回,我想与其每次都分配一个新的vector和一个新的字符串,不如我有一个内部vector和一个带有保留内存的内部字符串,我会一次又一次地清除。这行得通,我开始查看其他可能进行内存分配的地方,我看到了这个复制内部vector然后清除它的函数:autoadd_row()->std::vector{autorow(m_bufvec);m_bufvec.clear();returnrow;}我

c++ - 嵌套 vector 与连续数组的性能影响

是否有任何可靠的测试可以清楚地显示访问和写入嵌套vector与C++的内置数组之间的性能差异?我听说与访问单个数组中的元素(所有元素都存储在连续内存中)相比,使用嵌套(多维)vector通常会产生一些性能开销,但这对我来说似乎都是假设。我还没有看到任何实际显示这些差异的测试。它们重要吗?我确信这取决于场景,但作为一个没有经验的程序员,我不太确定这些差异在多大程度上会变得显着。 最佳答案 这绝对取决于场景,在某种程度上,我认为不可能以一般方式回答哪种方法最快。最快的方法是访问模式具有最佳数据局部性的方法——这在很大程度上取决于访问模式

c++ - 引用 vector 中的对象(现代 C++)

如果这很简单,我很抱歉,但我已经15年没有玩过C++了。考虑这个简单的例子:vector包含A类型的对象。B类的对象必须引用驻留在vector中的A对象。(编辑澄清-类B必须有一个引用A实例的成员)在过去,您只需声明一个A*就可以了,但是今天如何使用智能指针来完成呢?我不想在vector中存储共享或唯一指针,因为我不想在整个堆上分配A对象。它们必须在vector本身中。 最佳答案 根据您的要求,您有几个选项。非拥有原始指针A*在现代C++中使用非拥有原始指针并没有错。如果B需要对A的可空引用和A可以保证比B长寿那么原始指针就完全没问

c++ - 在 C/C++ 中从 int 获取单个数字以进行基数排序的最佳方法

从具有n个数字的int中获取单个数字以用于基数排序算法的最佳方法是什么?我想知道在C/C++中是否有特别好的方法,如果没有,一般的最佳解决方案是什么?编辑:澄清一下,我正在寻找一种解决方案,而不是将其转换为字符串并将其视为数字数组。 最佳答案 使用大小为2^k的数字。要提取第n个数字:#defineBASE(2>(n*k))&MASK;}使用移位和掩码(由基数为2的幂启用)避免昂贵的整数除法指令。之后,选择最佳基础是一个实验性问题(针对您的特定硬件进行时间/空间权衡)。可能k==3(base8)效果很好并且限制了buckets的数量

c++ - 如何将 QMap<QString, QMap<QString, int>> 转换为 QVariant?

QVariant(需要QSettings类)支持从QMap创建但是尝试初始化这样的东西:QMap)>i;给出错误:functionreturningafunction.然后我尝试了QMapQVariant()过载得到了error:nomatchingfunctionforcalltoQVariant::QVariant(QMap>&)现在我尝试了一个类型转换:QMap>i;得到了templateargument2isinvalidinvalidtypeindeclarationbefore';'token那么转换嵌套QMap所需的巫术是什么?到QVariant对象?

c++ - std::vector 可以 ='d 到另一个 std::vector 吗?

假设我有以下内容:std::vectormyints;然后我有一个返回intvector的函数:std::vectorGiveNumbers(){std::vectornumbers;for(inti=0;i然后我可以做:myints=GiveNumbers();这样做是否安全,使myints中只有数字0到49而没有其他内容?这样做会清楚以前在myints中的内容吗?如果不是,正确的方法是什么?谢谢 最佳答案 是的。这是安全的。您会将GiveNumbers()函数的结果复制到myints中。这可能不是最有效的方法,但它是安全和正确的

c++ - 将 MPL vector 转换为静态数组

我写了一些代码来生成一个boost::mpl::vector用作阶乘函数的查找表,作为对开发人员可能使用的更通用的库函数的测试能够以静态基元数组的形式生成查找表。该函数(最有可能实现为预处理器宏定义)将接受要初始化的数组的名称和大小,以及用作初始化每个元素的元函数的类模板的名称i的数组。我认为在不使用外部脚本的情况下执行此操作的最佳方法是创建一个boost::mpl::vector,如下面的代码list所示,并将数组中每个元素的用户提供的元函数的返回值推送到vector;使用vector的元素初始化静态数组(可能通过使用一系列宏,最后一个宏将使用__VARARGS__宏来完成此操作)。