草庐IT

vector_tostr

全部标签

c++ - 插入到只移动类型的 vector 中

我有一个std::vector>.我想insert一些nullptr进入这个vector的中间。我试过vec.insert(first,size,nullptr)但这显然行不通,因为nullptr需要复制。我可以重复调用insert的单数版本但我想知道是否有更有效的方法。 最佳答案 “高效”是需要衡量的。但是,如果您希望一次移动元素而不是不断地将它们向右移动一项,则可以使用std::rotate来完成。.方法如下vec.resize(vec.size()+size);//Addthe"null"pointerstotheend.//

C++ 递归模板分辨率 : flattening vectors of vectors elegantly

考虑以下(简单的)C++代码,将对象从自定义列表类型传输到std::vectortemplatevoidtransfer(std::vector&target,constcustom_list_type&source){for(constA&elem:source){target.push_back(elem);}}现在,想象一下有一个这样的自定义列表的std::vector并且想要展平结构,或者一个这样的vector的std::vector。天真地,我现在会继续编写这种类型的函数。templatevoidflatten_transfer(std::vector&target,cons

c++ - std::复制失败, "cannot seek vector iterator after end"

我整理了这个测试用例,它重现了我在更大的代码中遇到的情况和问题。事实上,我确实需要从POD结构的C数组进行复制,但我希望目标是一个vector,以便它可以自行处理复制删除。TEST_METHOD(std_copy){structW{longa;intb;charc;chard;};Wblock[1]={{15,42,'D','X'}};std::vectordest;dest.reserve(1);std::copy(block,block+1,dest.begin());Assert::AreEqual(42,dest[0].b);}dest.begin()调用中似乎出现了“无法在结

c++ - 关于STL中Vector的一些问题

我有一些关于STL中vector的问题需要澄清......vector中的对象分配在哪里?堆?vector有边界检查吗?如果索引越界,会发生什么错误?为什么数组比vector快?有没有vector不能用而array必须用的情况? 最佳答案 在堆上的连续内存块中。vector以相同方式分配内存newint[x]会。仅当您使用at方法。它抛出一个std::out_of_range如果边界检查失败则异常。operator[]不执行边界检查。因为数组可以直接访问内存,而访问vector元素很可能涉及方法调用。不过,差异可能小得离谱,尤其是当

C++ vector/链表混合

C++中是否有一个std容器,它的作用类似于vector和链表的混合体。我的意思是一种数据结构,它克服了std::vector的频繁重新分配开销和潜在的过多内存分配,而不是当结构空间不足时,它会添加指向下一个分配片段的指针,并且仅当片段数达到某个值,整个结构被去碎片化成一个连续的新block,碎片数设置回0。 最佳答案 如前所述,std::deque接近您的要求。我只想添加std::vector和std::deque之间的比较,我发现这非常有帮助。AnIn-DepthStudyoftheSTLDequeContainer

c++ - 用数组初始化 std::string 的 vector

我希望使用std::string数组初始化一个vector。我有以下解决方案,但想知道是否有更优雅的方法来做到这一点?std::stringstr[]={"one","two","three","four"};vectorvec;vec=vector(str,str+(sizeof(str)/sizeof(std::string)));当然,我可以通过如下定义大小来使其更具可读性:intsize=(sizeof(str)/sizeof(std::string));并将vector初始化替换为:vec=vector(str,str+size);但是这样还是感觉有点“不雅”。

c++ - reserve() 内存多维 std::vector (C++)

让我们有std::vector>face;face.resize(nElm);第一个维度resize()就可以了。但是,我也想为面的元素reserve()内存;我的意思是第二个维度。(我知道resize()和reserve()之间的区别) 最佳答案 就这样face.resize(nElm);for(auto&i:face)i.resize(nDim2);或者如果您不使用c++11:face.resize(nElm);for(std::vector>::iteratorit=face.begin();it!=face.end();++

c++ - 遍历 vector 会导致错误,但标准 for 循环不会

我有一个vector包含指向抽象类型Rock的指针:vectorrocks;如果我使用迭代器循环遍历vector,然后尝试通过迭代器访问对象(扩展Rock的非抽象类),我会在XCode4中收到“EXC_BAD_ACCESS”错误:vector::iteratorrockIter;for(rockIter=rocks.begin();rockIter!=rocks.end();++rockIter){bullet.hit(*(*rockIter));}但是像往常一样循环遍历它是没有问题的:for(inti=0;ihit()函数如下所示:boolBullet::hit(Rock&rock)

c++ - 将 vector<double> 写入二进制文件并再次读取

我正在尝试将doublevector写入二进制文件。完成此操作后,我想阅读它。这似乎不起作用。这是代码:ofstreambestand;vectorv(32);constchar*pointer=reinterpret_cast(&v[0]);size_tbytes=v.size()*sizeof(v[0]);bestand.open("test",ios::out|ios::binary);for(inti=0;iv2(32);inlezen.open("test",ios::in|ios::binary);charbyte[8];bytes=v2.size()*sizeof(v2[

c++ - 从成对 vector 中获取值时出错

为什么在对vector的迭代器中访问对的值时会出现以下错误?vector>mapper;if(Hash(input,chordSize)!=id){mapper.push_back(make_pair(tmp,input));}for(vector>::iteratorit=mapper.begin();it!=mapper.end();++it){cout错误信息:main_v10.cpp:165:25:error:‘std::vector>>::iterator’hasnomembernamed‘first’main_v10.cpp:165:56:error:‘std::vecto