草庐IT

vector_tostr

全部标签

c++ - 收缩 std::vector 's size to fit its actual data to save memory usage? vec.swap() doesn' t 在 MSVC 中工作吗?

实际上我的程序中有数百万个vector对象。默认情况下,对于每个vector,系统将分配比实际需要更多的空间,因为这些vector在完成加载后是只读的。所以我想缩小自己的容量来节省内存。一种典型的方法是使用vector.swap()方法,如thisquestion中所述:std::vectortmp(v);//copyelementsintoatemporaryvectorv.swap(tmp);//swapinternalvectordata我试过这段代码,但发现.swap()操作实际上并没有减少内存成本。(我查看了任务管理器中的PrivateWorkingSetsize来获取进程的

c++ - 如何将项目放入 const vector 中?

我一直在尝试多种不同的方法,但我无法弄清楚。我得到的声明是:conststd::vector&,我一直在尝试这样做:gradeReported.push_back(firstEntry);我一直收到错误。我很确定它与vector的常量性质有关。帮助将不胜感激! 最佳答案 你不知道。如果是const,则不能修改。您需要复制或通过非常量引用获取它。 关于c++-如何将项目放入constvector中?,我们在StackOverflow上找到一个类似的问题: htt

c++ - 从 vector 返回 bool&

这个问题在这里已经有了答案:Whyvector::referencedoesn'treturnreferencetobool?(6个答案)关闭9年前。在下面的代码中:classSomeClass{vectori;vectorb;public:int&geti(){returni[0];}bool&getb(){returnb[0];}};如果您注释掉getb(),代码可以正常编译。显然,返回对存储在vector中的int的引用没有问题,但您不能使用bool来实现。这是为什么?

c++ - 如何检查 C++ STL vector 中存在的值并将函数应用于 vector 的每个元素?

我有两个问题与C++标准库的vector类有关。如何检查vector中是否已经存在一个值(假设是一个整数)?我想要的文字如下:“如果整数已经存在于vector中,则下一个,否则将其添加到vector的末尾。”如何应用一个包含参数的函数到vector中的每个元素?(看来我不能用for_each做到这一点)换句话说:“对vector中的每个z元素应用MyAddFn(i,j)”...或者也许我没有在STLvector序列容器的正确轨道上,我应该定义我自己的迭代器? 最佳答案 1)std::find(v.begin(),v.end(),5)

c++从 vector 中删除其值在一个区间内的项目

有没有一种方便的方法可以从vector(或另一个STL容器)中删除值在特定区间内的项?例如:我有一个带有浮点值的vector1.11.32.23.24.15.25.11.18.02.1增量为0.2,这应该会导致以下结果1.12.23.24.15.18.0因此删除增量中的所有“重复”项目并保留范围内的值之一。可以假设这些值是“聚集的”,其中这些值之间的差异超过3*delta。只应保留集群的一个值(平均值),集群中的所有其他值都应删除。当然,可以用嵌套循环进行迭代,但这看起来很复杂,因为迭代器不断变化,所以我想到了一个更方便的方法。例如,我找到了remove_if,但是这个函数不能“比较”

C++,使用 vector<int[2]> 我可以 push_back({someNum1,someNum2}) 吗?

我有vector:vectorstoreInventory;//storeInventory[INDEX#]{ITEMNUM,QUANTITY}我想使用push_back()方法将新数组添加到库存vector。类似这样的东西:constintORANGE=100001;constintGRAPE=100002storeInventory.push_back({GRAPE,24});storeInventory.push_back{ORANGE,30};但是,当我尝试使用上面的语法时,出现错误Error:excpetedanexpression。我正在尝试的是不可能的,还是我只是以错误的

c++ - 使用 swap-and-pop 迭代时删除 vector 中的元素

我想在迭代vector时删除某些元素,但下面的代码导致“vector迭代器不可递增”断言失败。for(autoiter=vec.begin();iter!=vec.end();++iter){if((*iter).isDead()){std::swap(*iter,vec.back());//swapwiththebackvec.pop_back();//erasetheelement}}这段代码有什么问题? 最佳答案 只有在该次迭代中不删除任何元素时才应增加迭代器:for(autoiter=vec.begin();iter!=ve

c++ - 如何使用 CUDA c++ 将 vector 乘以矩阵

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。任何人都可以帮助我,我如何使用CUDAc++将vector(1*N)和矩阵(N*M)相乘并将结果存储在新vector(1*M)上。

c++ - std::vector::insert,以 end 作为第一个参数调用它可以吗?

至于title,把vec.end()作为position参数传过去可以吗?即,是的行为std::vectorvec;vec.insert(vec.end(),0);定义明确? 最佳答案 是的,它定义明确。假设如果vector为空,begin()等于end()。效果是它在迭代器之前插入元素的拷贝。§表100—序列容器要求(除容器外)|------------------------------------------------------------------------------||a.insert(p,t)|iterator

c++ - 无法指定 vector 的初始大小

我有一个名为ChessBoard的类,其中一个成员变量是std::vectorpieces(16);这给我一个“需要类型说明符”的错误。ChessPiece的默认构造函数是私有(private)的。但是,如果我在函数中编写相同的语句,它会完美地工作(即片段的初始大小为16)。为什么指定成员变量的初始大小时会报错?谢谢!中南合作:classChessPiece{ChessPiece();public:ChessPiece(intvalue){std::coutpieces(16);//Error:expectedatypespecifierpublic:ChessBoard(intval