3

std::vectors通过在开始时设置它们的容量并使用push_back来慢慢填充它们来使用一堆。这些向量中的大多数将具有相同的大小(16 个元素),尽管有些可能会变得更大。如果我push_back最初在大小为 0 且容量为 16 的向量上使用 16 次,我可以确定容量在 16 之后正好是 16push_backs吗?

4

3 回答 3

7

是的——一旦你保留了一个特定的容量,向量将不会被重新分配,直到你超过你设置的容量1。没有指定在不重新分配的情况下可以推送多少项目,但可以保证至少有多少项目。


  1. 特别是,指向向量的指针和迭代器保证在超过指定容量之前保持有效。
于 2013-02-15T17:32:18.597 回答
2

23.3.6.5 [vector modifiers]

void push_back(const T& x);
void push_back(T&& x);

备注:如果新大小大于旧容量,则导致重新分配

几乎不言自明。

于 2013-02-15T17:34:04.670 回答
2

是的。

23.3.6.3p6:

在调用之后发生的插入期间不会发生重新分配,reserve()直到插入会使向量的大小大于 的值capacity()

于 2013-02-15T17:36:49.867 回答