public member function
<vector>

std::vector::reserve

void reserve (size_type n);
請求更改容量
請求 vector capacity 至少能容納 n 個元素。

如果 n 大於當前的 vector capacity,該函式將導致容器重新分配其儲存空間,將其 capacity 增加到 n(或更大)。

在所有其他情況下,函式呼叫不會導致重新分配,並且 vector capacity 不受影響。

此函式對 vector size 沒有影響,也不能更改其元素。

引數

n
vector 的最小 capacity
請注意,結果 vector capacity 可能等於或大於 n
成員型別size_type是一種無符號整型型別。

返回值



如果請求的大小大於最大大小(vector::max_size),則會丟擲 length_error 異常。

如果發生重新分配,儲存將使用容器的 allocator 進行分配,分配可能會因失敗而丟擲異常(對於預設 allocatorbad_alloc如果分配請求不成功,則丟擲)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// vector::reserve
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int>::size_type sz;

  std::vector<int> foo;
  sz = foo.capacity();
  std::cout << "making foo grow:\n";
  for (int i=0; i<100; ++i) {
    foo.push_back(i);
    if (sz!=foo.capacity()) {
      sz = foo.capacity();
      std::cout << "capacity changed: " << sz << '\n';
    }
  }

  std::vector<int> bar;
  sz = bar.capacity();
  bar.reserve(100);   // this is the only difference with foo above
  std::cout << "making bar grow:\n";
  for (int i=0; i<100; ++i) {
    bar.push_back(i);
    if (sz!=bar.capacity()) {
      sz = bar.capacity();
      std::cout << "capacity changed: " << sz << '\n';
    }
  }
  return 0;
}

可能的輸出

making foo grow:
capacity changed: 1
capacity changed: 2
capacity changed: 4
capacity changed: 8
capacity changed: 16
capacity changed: 32
capacity changed: 64
capacity changed: 128
making bar grow:
capacity changed: 100


複雜度

如果發生重新分配,則最多與 vector size 成線性關係。

迭代器有效性

如果發生重新分配,則所有與容器相關的迭代器、指標和引用都將失效。
否則,它們將繼續指向呼叫前它們所指向的相同元素。

資料競爭

如果發生重新分配,則容器及其所有包含的元素都將被修改。
否則,將訪問容器,但不會訪問其包含的元素:併發訪問或修改它們是安全的。

異常安全

如果沒有發生重新分配,或者元素的型別具有不丟擲異常的移動建構函式或複製建構函式,則在發生異常的情況下容器不會發生變化(強保證)。
否則,容器保證處於有效狀態(基本保證)。
如果 n 大於 max_size,則該函式將丟擲 length_error

另見