在C++中,向量函数push_back会增加空数组的大小吗?

iaa*_*acp 5 c++ vector push-back

快问.假设我声明了一个大小为20的向量.然后我想使用push_back为它添加一些整数.

vector<int> myVector(20);
myVector.push_back(5);
myVector.push_back(14);
Run Code Online (Sandbox Code Playgroud)

我的载体的容量现在是22,还是20?5和14分别加入指数[19]和[20]?或者他们是[0]和[1]?

GMa*_*ckG 12

在这些陈述之后,其能力是实施定义的.(请注意,它的大小不同.)


vector<int> myVector(20);
Run Code Online (Sandbox Code Playgroud)

这会创建一个充满20个0的向量.它的大小正好是二十,其容量至少为二十.它是否完全是二十是实现定义的; 它可能有更多(实际上可能没有).

myVector.push_back(5);
Run Code Online (Sandbox Code Playgroud)

在此之后,数组的第21个元素是5,并且容量再次被实现定义.(如果之前的容量正好是二十,那么它现在以未指定的方式增加.)

myVector.push_back(14);
Run Code Online (Sandbox Code Playgroud)

同样,现在数组的第二十二个元素是14,容量是实现定义的.


如果你想保留空间,但不想插入元素,你可以这样做:

vector<int> myVector;
myVector.reserve(20); // capacity is at least twenty, guaranteed not
                      // to reallocate until after twenty elements are pushed

myVector.push_back(5); // at index zero, capacity at least twenty.
myVector.push_back(14); // at index one, capacity at least twenty.
Run Code Online (Sandbox Code Playgroud)

  • 请注意,C++ 03标准23.2.4/1要求"vector`s"支持**(摊销)常量时间**结束时插入和擦除操作",因此在实践中容量通常会扩展两倍当`push_back()`需要更多空间时. (2认同)