草庐IT

pending_push_cursor

全部标签

c++ - push_back 'dynamically allocated object' 到 vector 安全吗?

每当我需要将动态分配的对象添加到一个vector中时,我都会按照以下方式进行操作:classFoo{...};vectorv;v.push_back(newFoo);//dostuffwithFooinv//deleteallFooinv它刚刚奏效,许多其他人似乎也在做同样的事情。今天,我了解到vector::push_back可以抛出异常。这意味着上面的代码不是异常安全的。:-(所以我想出了一个解决方案:classFoo{...};vectorv;auto_ptrp(newFoo);v.push_back(p.get());p.release();//dostuffwithFooin

c++ - 为什么Vector的size()和capacity()在push_back()之后不一样

我刚开始学习vector,对size()和capacity()有点困惑我对他们两个都知之甚少。但是为什么在这个程序中两者是不同的呢?甚至array(10)也在为10个元素腾出空间并用0进行初始化。在添加array.push_back(5)之前所以array.size();是10没问题。所以array.capacity();是10没问题。添加array.push_back(5)后所以array.size();是11就可以了(已经添加了10次0然后push_back再添加一个元素5)。所以array.capacity();是15为什么?(是否为一个int保留5个block?)。#inclu

c++ - pragma warning(push, 0) 不禁用/墙警告?

我记得这个技巧在过去的某个时候有用,但现在似乎不起作用了。在#include语句周围放置#pragmawarning(push,0)实际上并不能阻止/Wall从这些语句中生成警告包含文件。将/Wall更改为/W4解决了这个问题,但使用/Wall似乎被打破了。#pragmawarning(push,0)#include#pragmawarning(pop)intmain(){std::cout构建输出:MicrosoftVisualStudioCommunity2017版本15.5.3完整的命令行开关(从cmake生成):/GS/TP/analyze-/Wall/Zc:wchar_t/G

c++ - vector.push_back 右值和复制省略

我像这样push_back一个临时对象到一个vector中,vectorvec;vec.push_back(A("abc"));编译器是否会应用复制省略将临时A("abc")直接构造到vector中,以便A'将临时对象插入vec时不会触发s复制构造函数。 最佳答案 如果你有一个支持右值引用的编译器,它会被移动到vector中,这有时非常便宜。另一种方法是直接在vector中构造对象,这可以通过vec.emplace_back("abc");来完成。这只会调用一个构造函数。这两个都是C++11的特性。此处不允许省略复制,因此如果没有这

c++ - 在扩展期间将 vector 成员插入 vector : vector. push_back(vector[0])

我正在用C++编写自定义vector类。我对这样的代码有疑问:vectorvec;vec.push_back(one);vec.push_back(two);vec.push_back(vec[0]);push_back的定义如下:voidpush_back(constT&v)避免不必要的复制。它的实现看起来像if(size==capacity){allocatenewstoragecopyoldvaluesintonewstorage//2deleteoldstoragefixpointersandcounters}//1copyvattheendofstorage如果我们想压入已经

c++ - 警告级别为 3 的 int 的 std::vector push_back 处的编译器警告

我使用的是英特尔C++编译器icc版本18.0.3。如果我编译followingcode使用-w3#includeintmain(){std::vectorvec;vec.push_back(2);return0;}test_w3.cpp(6):remark#383:valuecopiedtotemporary,referencetotemporaryusedvec.push_back(2);Replacing2有一个const变量as#includeintmain(){std::vectorvec;constinta=2;vec.push_back(a);return0;}不发出警告

c++ - Push_back 比 insert 快?

我正在使用std::deque。我确信用单个insert替换带有push_back的循环会提高性能。也推荐,比如here.但现在我不再那么确定了。我对测试代码运行了一些基准测试。主要.cpp:#include"queueInsert.h"#includestd::dequequeue;constexprsize_tlen=64;intarr[len];intmain(){DWORDstartTime=GetTickCount();for(inti=0;i队列插入.h:#includevoidinsert(std::deque&,int*arr,intn);queueInsert.cpp

c++ - 将指针 push_back 到指针 vector 中是内存泄漏吗?

在我的类中,我有一个成员变量std::vectorchildren下面的类成员函数会造成内存泄漏吗?//addsachildnode{node*child=newnode("blah","blah","blah");child->Set_Parent(this);children.push_back(child);//vector复制了一个指针,我有两个指向同一内存的指针,然后原始指针超出范围,对吗?这可能简单明了,但我只想确认我的假设。谢谢 最佳答案 这不是泄漏……还不是。但是,如果vector超出范围,或者你erase,pop_

c++ - push_back() 和 resize(size()+1) 有区别吗

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。通过执行以下任一操作,可以扩展标准vector以容纳更多成员:std::vectorv;v.push_back(1);或intos=v.size();v.resize(os+1);v[os]=1;除了使用push_back()的代码简洁之外,还有其他区别吗?例如,一种比另一种更有效,还是在每种情况下分配的额外内存不同?

c++ - std::vector push_back(Object()) 和 push_back(new Object()) 的区别?

在我当前的代码中,我想将新的DrawObjects插入到我创建的vector中,std::vector对象;有什么区别:objects.push_back(DrawObject(name,surfaceFile,xPos,yPos,willMoveVar,animationNumber));和objects.push_back(newDrawObject(name,surfaceFile,xPos,yPos,willMoveVar,animationNumber)); 最佳答案 第一个添加非指针对象,而第二个添加指针到vector。