c++ - 在 C++ 中, vector 函数 push_back 会增加空数组的大小吗?

标签 c++ vector push-back

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

vector<int> myVector(20);
myVector.push_back(5);
myVector.push_back(14);

我的vector的容量现在是22,还是还是20?索引 [19] 和 [20] 分别添加了 5 和 14 吗?还是它们在 [0] 和 [1]?

最佳答案

在这些语句之后,它的容量是实现定义的。 (请注意,这与其大小不同。)


vector<int> myVector(20);

这将创建一个由 20 个 0 填充的 vector 。它的大小是二十,准确地说,它的容量至少是二十。它是否恰好是二十是实现定义的;它可能有更多(实际上可能没有)。

myVector.push_back(5);

在此之后,数组的第 21 个元素为 5,容量再次由实现定义。 (如果容量之前恰好是二十,现在以未指定的方式增加。)

myVector.push_back(14);

同样,现在数组的第 20 位元素是 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.

关于c++ - 在 C++ 中, vector 函数 push_back 会增加空数组的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7774938/

相关文章:

c++ - 为什么不能在 2D vector 中 push_back? C++

c++ - 已知大小时向 vector 添加元素的基准测试

c++ - 如何通过某个元素可以在特定专业范围内进行评估?

c++ - 如何在我的 Qt 项目中添加 BLAS_LIB?

c++ - 在 API 中导出常量的正确方法

c++ - rand() 在通过仿函数调用时生成相同的随机数集(即使在使用 srand(time(NULL)) 播种后)

java - 编写小型 Java 3d vector 类的最佳方法

C++ STL vector : Get iterator from index?

c++ - 在函数类中使用 push_back 更新指针 vector 的大小

c++ - 错误 : incompatible types in assignment of 'char*' to 'char [4000]'