resize和reserve函数本质都涉及了vector的内存存储空间,因为vector在内存中是连续存放的,所以当resize的空间大于现有的存储空间(capacity() 函数 返回当前vector在重新进行内存分配以前所能容纳的元素数量.)时,会重新选择更大的空间,并将所有元素复制过去。resize在初始化内存容量时有对值的初始化,所以此时push_back会产生...
push_back 函数:construct 代码语言:javascript 复制 voidpush_back(const_Tp&__x){//在最尾端插入元素if(_M_finish!=_M_end_of_storage){//若有可用的内存空间construct(_M_finish,__x);//构造对象++_M_finish;}else//若没有可用的内存空间,调用以下函数,把x插入到指定位置_M_insert_aux(end(),__...
从代码可以看出来,如果size()小于capasity()肯定是push_back()比resize()要好。如果size()大于等于capacity(),那么push_back()和resize()差不多,但是怎么着都比resize()然后再赋值好。所以最开始的代码应该用push_back()。
原因:resize会重新设置vector的大小,并且元素初始化为零。
使用vector的使用我们有时会用到resize和reserve函数进行内存的分配。在之前的测试中我们发现先使用resize再用下标访问读取数据的效率要远远高于push_back()(测试结果见下),所以resize函数在初始化的时候会被使用。 关于vector push_back()与其他方式读取数据的效率对比 ...
ivector.resize(15); //adds 5 elements of value 0 to back of ivector ivector.resize(25, -1); //adds 10 elements of value -1 to back of ivector ivector.resize(5); //erases 20 elements from the back of ivector resize操作可带有一个可选的元素值形参。如果在调用该函数时提供了这个参...
这一步与调整大小 resize 或在构造函数中传入3是不同的,那样的话会构造三个vertex 对象(甚至无法编译)。reserve 可以确保我们有足够的内存。 运行试试看,这样可以得到多少个复制信息。 三个,只有原来的一半了。 第二步,我们想调整为在实际的 vector 中构建对象,而不是在 main 中构建好后再移入 vector 中,可...
myvector.resize(5); 将原来有10个数的vector数组,调整为5个数的长度,多余的数删掉,释放内存。5 < 10 减小数组长度 myvector.resize(8,100); 将5个数长度的vector数组的长度调整为8,不够的数用100来填补,即增加了3个100。8 > 5 增大数组长度,指定填充元素 ...
1会引起其底层空间改变的操作,都有可能是迭代器失效,比如:resize、reserve、insert、assign、 push_back等。 1指定位置元素的删除操作--erase erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而...