草庐IT

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。

c++ - std::vector::push_back 不可复制对象给出编译器错误

我在g++(GCC)4.7.2上遇到编译错误但不在MSVC-2012当试图std::vector::push_back不可复制(私有(private)复制构造函数)但可移动的对象。对我来说,我的示例看起来与SO和其他地方的许多其他示例相同。错误消息使它看起来像是结构不是“可直接构造”的问题-我不知道这意味着什么,所以我加倍不确定为什么对象需要“可直接构造”才能被推回。#include#includestructMyStruct{MyStruct(std::unique_ptrp);MyStruct(MyStruct&&other);MyStruct&operator=(MyStruct

c++ - 为什么 push_back 有两个左值和右值重载?

为什么一个类/函数会有两个重载,一个用于左值,一个用于右值?例如,来自this视频,它说我们有两个重载vector::push_backvoidpush_back(constT&value);voidpush_back(T&&value);为什么我们不能只有一个值重载,voidpush_back(Tvalue);如果它是一个左值,值将被复制,如果它是一个右值,值将被move。这不是标准的工作方式和保证方式吗? 最佳答案 根据您的按值提议,技术上会有复制+move或move+move,而对于其他两个重载,只有一个拷贝或一个move。

c++ - 在 push_back pop_front 场景中是否需要使用互斥锁锁定 STL 列表?

我有一个线程后推到STL列表,另一个线程从列表中弹出。在这种情况下我需要用互斥量锁定列表吗? 最佳答案 来自SGI'sSTLonThreadSafety:Ifmultiplethreadsaccessasinglecontainer,andatleastonethreadmaypotentiallywrite,thentheuserisresponsibleforensuringmutualexclusionbetweenthethreadsduringthecontaineraccesses.由于您的两个线程都修改了列表,我想您必

c++ - push_back 如何在 STL vector 中实现?

我在一次采访中被问到这个问题。我回答的点是这样的1)指向当前位置的索引;2)必要时调整大小。谁能详细说明一下? 最佳答案 STLvector有一个size(当前存储元素的数量)和capacity(当前分配的存储空间)。如果size,一个push_back简单地将新元素放在末尾并递增size1.如果size==capacity在push_back之前,分配了一个新的更大的数组(两倍大小是常见的,但这是依赖于实现的afaik),所有当前数据都被复制(包括新元素),并释放旧分配的空间。如果分配失败,这可能会引发异常。操作的复杂性是摊销O(

c++ - vector.emplace_back() 和 vector.push_back() 做同样的事情吗?

所以我试图将整数添加到我的vector的背面,并错误地认为push_back()将新数据添加到vector的前面(又名vector[0])。我在Xcode中做了一个测试,并针对emplace_back()测试了push_back()并得到了相同的结果。我以为他们是不同的,但这让我觉得也许他们做同样的事情。如果是这样,为什么vector有不同的方法?这是我的代码,以防我这样做:#include#includeusingnamespacestd;intmain(intargc,constchar*argv[]){//forpush_backvectorpush;push.push_back