草庐IT

static_vector

全部标签

c++ - 带 static_assert() 的逗号运算符

当尝试使用static_assert作为参数来计算逗号运算符时编译失败voidfvoid(){}intmain(){inta=(1,2);//a=2intb=(fvoid(),3);//b=3intd=(,5);//^//error:expectedprimary-expressionbefore','token.OKintc=(static_assert(true),4);//^~~~~~~~~~~~~//error:expectedprimary-expressionbefore'static_assert'.Why?}看起来static_assert()在编译后甚至没有解析为vo

c++ - 从函数按值返回STL vector 的有效方法

这是Efficientwaytoreturnastd::vectorinc++的一个扩展问题#include#include#includestd::vectorfunc1(){std::vectorv;v.reserve(1e6);for(inti=0;ifunc2(){std::vectorv;v.reserve(1e6);for(inti=0;iv1=func1();autoend1=std::chrono::steady_clock::now();printf("%d\n",std::chrono::duration_cast(end1-start1).count());aut

c++ - decltype(some_vector)::size_type 不能用作模板参数

下面的类不编译:template,classAllocator=std::allocator>classMyContainer{public:std::vectordata;std::vector>order;};我收到以下编译器错误:error:type/valuemismatchatargument2intemplateparameterlistfor‘templatestructstd::pair’为什么编译失败,而下面的代码工作正常?template,classAllocator=std::allocator>classMyContainer{public:std::vecto

c++ - 将 C 风格的转换更改为 static_cast 总是安全的吗?

由于cppcheckcstyleCast样式警告,我正在尝试消除代码库中的所有C样式转换。将C风格的转换更改为static_cast总是安全的吗?安全,我的意思是,是否存在旧的C风格转换可以正常工作,但static_cast会引发错误或未定义行为的情况?type1a;type2b=(type2)a;//Cstylecasttype2b=static_cast(a);//Isthisalwaysavalidreplacementforabovecast? 最佳答案 C风格的转换通常是static_cast的组合或reinterpret

c++ - 如何将 `boost::static_visitor` 实例传递给函数

我正在使用boost::variant在我的项目中经常出现。我的同事们现在想出了传递特定boost::static_visitor实例的想法。以自定义访问类型。她有一些代码如下:#include#includetypedefboost::variantTVar;structVisitor1:publicboost::static_visitor{templateresult_typeoperator()(constT&){return42;}};structVisitor2:publicboost::static_visitor{templateresult_typeoperator(

c++ - 从不同类型容器的迭代器初始化 vector

给出以下代码:#include#includeintmain(){chararr[3]={1,2,3};std::vectorvec={1,2,3};std::vectorvec_one(std::begin(arr),std::end(arr));std::vectorvec_two(vec.begin(),vec.end());}vec_o​​ne和vec_two的初始化是未定义的、实现定义的还是根据正常类型转换规则定义的?如果交换char和int类型会怎样? 最佳答案 它们都很好,遵循将char转换为int(所以不用担心)和i

c++ - 在 vector vector 的 vector 中找到最大位置

我有一个vector的vector的vectorstd::vector>>mountain_table我想找到该vector的最高坐标i、j、k。我知道我应该使用max_element但我不知道如何在3dvector中使用它。我应该如何获得这些坐标? 最佳答案 我建议将您的数据线性化,以便能够使用标准算法。这个想法是提供几个函数来从3D坐标获取索引,反之亦然:templateclassMatrix3D//minimal{public:usingvalue_type=T;usingiterator=std::vector::itera

C++如何从值列表初始化 vector 成员

我正在尝试用整数数组初始化vector成员变量:#include#includestructA{A(intarr[]):mvec(arr){}std::vectormvec;};intmain(){As({1,2,3});}编译给我错误:$c++-std=c++11try59.cpptry59.cpp:15:12:note:candidatesare:try59.cpp:6:1:note:A::A(int*)A(intarr[]):mvec(arr)如何使用整数数组初始化vector? 最佳答案 我只会使用std::initiali

c++ - 并行 vector 调整大小不加速

我必须使用8个处理器。我想按如下方式进行并行调整大小:vector>test;test.resize(10000);#pragmaompparallelnum_threads(8){#pragmaompforfor(inti=0;i我注意到该程序并没有使用100%的处理器能力——它只使用了15%。当我更改代码时vector>test;test.resize(1000000);#pragmaompparallelnum_threads(8){#pragmaompforfor(inti=0;i程序使用了大约60%的处理器能力。我不明白这种现象——我希望它在这两种情况下都能使用100%的处理

c++ - 在将大小较大的 vector move 到容量较小的 vector 之前,是否可以通过使用 reserve() 来提高代码性能?

如果这个问题不完整、不清楚或重复(这是我的第一个问题),请提前道歉。在研究move语义和为我的OOP类(class)做一个小项目时,我偶然发现了一个我自己无法回答的问题。据我所知std::move()通过将l值转换为r值来工作,但假设我们将一个包含很多元素的vectormove到容量为1的第二个vector中。我可以使用reserve()避免由于std::move()将r值move到第二个vector中,第二个vector的大量自动内存重新分配或者使用reserve()没有效果?可以在下面找到我的问题的简单实现。#include#include#includeintmain(){std