草庐IT

vector_tostr

全部标签

c++ - STL vector : Moving all elements of a vector

我有两个STLvectorA和B,我想清除A的所有元素并移动的所有元素>B到A然后清除B。简单地说,我想这样做:std::vectorA;std::vectorB;....A=B;B.clear();由于B可能很长,因此需要k*O(N)来执行此操作,其中k是一个常量,N是max(size_of(A),size_of(B))。我想知道是否有更有效的方法来做到这一点。我能想到的一件事是将A和B定义为指针,然后在恒定时间内复制指针并清除B。 最佳答案 使用C++11,就这么简单:A=std::move(B);现在A包含以前由B持有的元素,

c++ - 使 std::vector 分配对齐的内存

是否可以使自定义结构的std::vector分配对齐的内存,以便使用SIMD指令进行进一步处理?如果可以使用Allocator,有没有人碰巧有这样的分配器可以共享? 最佳答案 编辑:我按照GManNickG的建议删除了std::allocator的继承,并使对齐参数成为编译时的事情。我最近写了这段代码。它没有像我希望的那样经过测试,所以继续并报告错误。:-)enumclassAlignment:size_t{Normal=sizeof(void*),SSE=16,AVX=32,};namespacedetail{void*alloc

*不*初始化其成员的C++ vector ?

我正在为一段C代码创建一个C++包装器,该代码返回一个大数组,因此我尝试在vector中返回数据.现在的问题是,数据的数量级是兆字节,而vector不必要地初始化它的存储,这实际上将我的速度降低了一半。如何防止这种情况发生?或者,如果不可能——是否有其他STL容器可以避免这种不必要的工作?还是我必须自己制作容器?(C++11之前的版本)注意:我正在传递vector作为我的输出缓冲区。我不会从其他地方复制数据。是这样的:vectorbuf(size);//Whyinitialize??GetMyDataFromC(&buf[0],buf.size()); 最佳

c++ - 调用 std::vector::clear() 会将 std::vector::capacity() 设置为零吗?

如果我在vector上使用.reserve(items),vector将分配足够的内存来猜测我需要的项目数。如果我稍后使用.clear(),那只是清除vector还是保存我之前定义的储备?谢谢。 最佳答案 指定std::vector::clear()影响大小。它可能不会影响容量。要重置容量,请使用swap技巧:std::vectorv1;//somehowincreasecapacitystd::vector().swap(v1);注意:由于这个旧答案仍在获得支持(因此人们阅读它),我觉得有必要添加C++11已添加std::vect

c++ - 如何将欧拉角转换为方向 vector ?

我有俯仰角、滚动角和偏航角。我如何将这些转换为方向vector?如果你能给我看一个四元数和/或矩阵表示,那就太好了! 最佳答案 不幸的是,关于如何定义这些东西有不同的约定(滚动、俯仰、偏航与欧拉角并不完全相同),所以你必须小心。如果我们将pitch=0定义为水平(z=0),yaw定义为从x轴逆时针方向,那么方向vector将为x=cos(yaw)*cos(pitch)y=sin(yaw)*cos(pitch)z=sin(pitch)NotethatIhaven'tusedroll;thisisdirectionunitvector,

C++试图交换 vector 中的值

这是我的交换功能:templatevoidswap(t&x,t&y){ttemp=x;x=y;y=temp;return;}这是我的函数(在附注v存储字符串)调用交换值,但每当我尝试使用vector中的值调用时,我都会收到错误。我不确定我做错了什么。swap(v[position],v[nextposition]);//createserrors 最佳答案 我认为您正在寻找的是iter_swap您也可以在中找到.您需要做的只是传递两个迭代器,每个迭代器都指向您要交换的元素之一。因为你有两个元素的位置,你可以这样做://assumin

c++ - 如何声明同一类的成员 vector ?

为什么下面的代码可以工作?structA{std::vectorsubAs;};A是不完全类型,对吧?如果有一个A*s的vector,我会理解的。但在这里我不明白它是如何工作的。这似乎是一个递归定义。 最佳答案 这个paper被采纳intoC++17这允许在某些STL容器中使用不完整的类型。在此之前,它是未定义的行为。引用论文:BasedonthediscussionontheIssaquahmeeting,weachievedtheconsensustoproceed*withtheapproach–“ContainersofIn

c++ - 如何在将对象添加到 vector 中时创建对象?

我有一个C++vector。我希望vector包含可变数量的对象。VisualStudio2012给我一个错误:Error:typenameisnotallowed从此C++代码:#include#includeusingnamespacestd;classtestObject{private:intsomeInt;public:testObject(inta){someInt=a;}voidshow(){couttestVector;cout但这是另一个看起来相同但不起作用的代码示例。voidDealer::setNumberOfPlayers(constinttNumber){fo

c++ - 数组 vector 的内存布局是什么?

谁能解释一下内存布局std::vector>vec(2)它是否提供二维数组的连续内存块有2行,每行5个元素?据我了解,vector的vectorstd::vector>vec(2,std::vector(5))提供两个长度连续数组5个元素在内存中的不同位置的内存布局。数组的vector会一样吗? 最佳答案 数组没有任何间接性,只是“直接”存储它们的数据。也就是说,一个std::array字面上包含五个ints连续,平坦。而且,与vector一样,它们不会在元素之间添加填充,因此它们是“内部连续的”。但是,thestd::arrayo

c++ - vector :初始化还是保留?

我知道vector的大小,初始化它的最好方法是什么?选项1:vectorvec(3);//in.hvec.at(0)=var1;//in.cppvec.at(1)=var2;//in.cppvec.at(2)=var3;//in.cpp选项2:vectorvec;//in.hvec.reserve(3);//in.cppvec.push_back(var1);//in.cppvec.push_back(var2);//in.cppvec.push_back(var3);//in.cpp我猜,Option2比Option1好。是吗?还有其他选择吗? 最佳答案