草庐IT

stdvector

全部标签

c++ - 将 std::vector 重命名为另一个类以进行重载?

看看这段代码。#includetemplateusingother_vector=std::vector;templatevoidf(std::vector&){}templatevoidf(other_vector&){}intmain(){other_vectorb;f(b);return0;}它不编译,因为f正在重新申报。我完全理解这个错误。但是,我需要一个行为类似于std::vector的第二类,但将被视为不同的类型,因此如上例所示的重载将是合法的。我能做什么?让新类(class)有std::vector作为基类。这可能有效,但不应从标准容器继承。让新类有一个std::vect

c++ - OpenMP 中的预分配私有(private) std::vector 在 C++ 中并行化 for 循环

我打算使用缓冲区std::vectorbuffer(100),一个循环的并行化中的每个线程中的一个,正如这段代码所建议的:std::vectorbuffer(100);#pragmaompparallelforprivate(buffer)for(size_tj=0;j此代码无效。尽管每个线程都有一个缓冲区,但它们的大小可以为0。如何在每个线程的开头分配缓冲区?我还能用吗#pragmaompparallelfor?我可以做得比这更优雅吗:std::vectorbuffer;#pragmaompparallelforprivate(buffer)for(size_tj=0;j

c++ - 为什么需要 std::move 来调用 std::vector 的 move 赋值运算符

我正在学习C++11,我有一个关于move语义和右值引用的问题。我的示例代码如下(C++ShellURL是cpp.sh/8gt):#include#includevoidaaa(std::vector&&a){std::coutv;v=a;/*std::move(a)*/std::coutfoo(3,0);aaa(std::move(foo));return0;}结果是:sizeofabeforemove:3sizeofaaftermove:3std::vector的move赋值运算符似乎没有在aaa函数的v=a行调用,否则a会大小为0而不是3。但是,如果我将v=a更改为v=std::

c++ - 为什么这个函数会产生不正确的值?

这个问题在这里已经有了答案:Whyisthestd::accumulatefunctionshowingthewrongsumofavector?(4个答案)关闭4年前。我有一个简单的函数模板来计算容器的平均值:templateTarray_average(std::vector&values){if(std::is_arithmetic::value){if(!values.empty()){if(values.size()==1){returnvalues[0];}else{return(static_cast(std::accumulate(values.begin(),valu

c++ - 如何编写可以接受数组或 vector 的函数?

我想编写一个带有一个参数的C++函数,以便可以传入以下任何一种类型:std::vectorstd::arrayintarray[numElements]int*ptr=newint[numElements]etc模板是实现这一目标的最佳方式吗? 最佳答案 如果您希望只能执行func(v),您做不到,因为我无法想到您的函数可以推断出动态分配的int[的大小numElements].包装它的一个好方法是采用一对前向迭代器,也就是说,如果您只需要一个一个地迭代项目,因为随机访问在某些容器上非常糟糕,例如std::list。template

c++ - 为什么调用 std::vector::back() 会使我的程序崩溃

我不确定这段代码有什么问题:std::vectormyVector(0);if(myVector.back()==12)myVector.push_back(12);似乎在空vector上调用back()会使程序崩溃。我不明白为什么会崩溃?我们需要在调用back()之前检查vector的长度吗?或者这可能是一个错误?文档说,如果vector为空,它会返回一个未定义的值。 最佳答案 doweneedtocheckthelengthofthevectorbeforecallingback()?一句话:是的。这是你的错误,你的vector

c++ - 有没有更有效的方法从流中设置 std::vector ?

目前,我设置了一个std::vector的值来自std::ostringstream如下:voidfoo(std::vector&data,std::stringstream&stream){data=std::vector(stream.str().begin(),stream.str().end());}我想知道在C++中使用STL是否有更有效的方法,或者我在这里给出的方法是否合适?使用std::stringstream会更好吗?相反? 最佳答案 正如评论中所指出的,由于对str()的两次调用,您的代码不正确。为了提高效率,您可

c++ - 如何将 std::queue 转换为 std::vector

我需要使用double队列,因为它作为有序容器具有良好的特性。我想将此队列传递给接受vector的类构造函数。如果我直接这样做,我会收到以下错误:candidateconstructornotviable:noknownconversionfrom'std::queue'to'std::vector&'for2ndargument如何将队列转换为vector? 最佳答案 模拟queue_like行为和vector-like行为的正确容器是std::deque。这样做的好处是:在双端队列的任意一端进行恒定时间插入和删除能够在不破坏双端

当 push_back 新元素到 std::vector 时,C++ 引用发生变化

我不确定这是怎么回事-请告诉我下面的代码有什么问题。我修改了我的代码以将其简化为最简单的术语。有一个带有一堆MyNode对象的std::vector。第一步是获取对这些节点之一的数据元素之一的常量引用(Datam_data)——在下面的示例中,在插入第二个节点之前只有一个节点,如下所示:constcv::Data&currData=m_nodesVector[currIndex].GetData();MyNodenode(...);m_nodesVector.push_back(node);恰好在vector::push_back调用时,currData的值发生了变化!!我只是不明白。

c++ - vector push_back 调用 copy_constructor 不止一次?

我对vectorpush_back的行为方式有点困惑,在下面的代码片段中,我希望复制构造函数只被调用两次,但输出表明并非如此。是否是导致此行为的vector内部重组。输出:InsidedefaultInsidecopywithmy_int=0Insidecopywithmy_int=0Insidecopywithmy_int=1classMyint{private:intmy_int;public:Myint():my_int(0){coutmyints;Myintx;myints.push_back(x);x.set(1);myints.push_back(x);