草庐IT

vector_tostr

全部标签

c++ - vector<T>::swap 和临时对象

代码如下:#includeintmain(){vectorv1(5,1);v1.swap(vector());//trytoswapv1withatemporaryvectorobject}上面的代码无法编译,错误:error:nomatchingfunctionforcallto‘std::vector>::swap(std::vector>)’但是,如果我将代码改成这样,它可以编译:intmain(){vectorv1(5,1);vector().swap(v1);}为什么? 最佳答案 因为vector()是一个rvalue(暂

C++为什么vector初始化会调用copy constructor

当你用下面的方式初始化一个vector时:std::vectorMyVec(10);它调用默认构造函数一次,然后再调用复制构造函数10次。所以,如果我没理解错的话,vector中的对象都是拷贝构造函数生成的。有人可以解释调用复制构造函数而不是默认构造函数的原因吗?或者甚至只是在没有对象的情况下分配内存? 最佳答案 它将分配没有对象的内存,除非您指定初始大小为10,因此它必须创建10个对象。如果你想要存储10个对象而不实际创建它们,你可以这样做:std::vectorMyVec;MyVec.reserve(10);如果你看一下你正在使

c++ - vector 与数组性能

在另一个线程中,我开始了关于vector和数组的讨论,其中我主要是在唱反调,以插入按钮。然而,在这个过程中,我偶然发现了一个让我有点困惑的测试用例,我想就它进行真正的讨论,关于我因为唱反调而受到的“虐待”,开始一个真正的现在不可能对该线程进行讨论。但是,具体的例子让我很感兴趣,我无法对自己进行令人满意的解释。讨论的是vector与数组的一般性能,忽略了动态元素。例如:显然在vector中连续使用push_back()会减慢它的速度。我们假设vector和数组预先填充了数据。我提出的示例,随后由线程中的个人修改,如下所示:#include#include#includeusingname

c++ - std::vector 调整大小方法背后的设计原理是什么?

模板类vector中的许多方法采用对value_type对象的const引用,例如:voidpush_back(constvalue_type&val);当resize按值获取其value_type参数时:voidresize(size_typen,value_typeval=value_type());作为一个非专业的C++程序员,我只能想到这种选择的缺点(例如,如果size_of(value_type)足够大,可能会发生堆栈溢出)。因此,我想向对语言有更多了解的人提出的问题是:这个选择背后的设计原理是什么? 最佳答案 voidr

c++ - SSE减少浮点 vector

如何使用sse内在函数获取浮点vector的总和元素(减少)?简单的串口代码:void(float*input,float&result,unsignedintNumElems){result=0;for(autoi=0;i 最佳答案 通常您会在循环中生成4个部分和,然后在循环后对4个元素进行水平求和,例如#include#include#includefloatvsum(constfloat*a,intn){floatsum;__m128vsum=_mm_set1_ps(0.0f);assert((n&3)==0);assert(

c++ - 通过引用 vector 传递的线程函数启动缓慢

我一直在研究C++0x线程并拥有这段代码:#include#include#includevoidTestFunc(constvector&vVec){coutvTest(sizer);for(intf=0;f如您所见,它只是将vector传递给线程。我不明白的是,出现“Vcreated”消息后有一个停顿。最初这(我假设)是被复制用于函数的vector。为了阻止这种情况,我改为通过引用传递,但这没有任何区别。延迟似乎与vector的大小成正比,这表明它仍在复制(或对数组进行某些操作)。如果我在没有线程的情况下尝试相同的实验并直接调用该函数,则在按值传递时存在延迟,但在按引用传递时却没有

c++ - vector 数组 C++ - 添加元素时的奇怪行为

google和stackoverflow搜索都帮不了我,我别无选择,只能向你们求助。我想使用一个vector数组——我知道这个数组只需要包含两个vector。因此vectortestVect[1];现在,当我想将一个元素添加到我使用的数组中包含的第一个vector时testVect[0].push_back(0);到目前为止一切似乎都正常——不幸的是,将一个元素添加到第一个vector也会以某种方式将相同的元素(在本例中为0)添加到第二个vector。有人能告诉我这种行为的原因吗?(请)-也许是一种解决方法。目前我必须使用VisualStudio6(雇主不会安装新的编译器-我已经激怒了

c++ - 通过引用函数传递 vector ,但变化不会持续存在

我是C++的新手,所以请原谅菜鸟问题。在我的程序中,我通过引用将一个“Employee”对象的vector传递给一个函数,该函数在vector中的每个对象上调用一个Employee成员函数,以将“薪水”提高“r”个百分点(在本例中为2%)。我已经通过记录调用(薪水在函数内发生了变化)验证了这种情况的发生,但是这些变化并没有持续存在……当我再次打印Employee对象时,薪水没有变化。感谢任何帮助!//main.cppvoidraiseAllBy2Percent(vector&v){for(inti=0;i 最佳答案 您通过引用传递v

c++ - 将 std::array 转换为 std::vector

在下面的代码中,函数(foo)参数(std::vector)的大小可以是任何使函数成为通用函数的大小。但是,有时大小容器是已知的,因此可以使用std::array。问题是将std::array转换为std::vector。解决这个问题的最佳方法是什么?在这种情况下总是使用std::vector会更好吗?#include#include#includeusingnamespacestd;//genericfunction:sizeofthecontainercanbeanythingvoidfoo(vector&vec){//dosomething}intmain(){arrayarr;

c++ - 为什么 Vector 不提供 remove() 成员函数而 list 提供?

如果我想从vector中删除所有具有值的元素,我调用removealgorithm然后调用vector的erase成员函数来物理删除它。但在list的情况下,简单调用remove成员函数,它将删除具有该值的所有元素。我不确定为什么vector不提供removeMF而list提供。对于Exp:我想从vectorv中删除值“4”。vectorv;vector::iteratorItr;for(inti=0;i对于列表:list.remove(4);//willdeletealltheelementwhichhasvalue4 最佳答案