public member function
<vector>

std::vector::resize

void resize (size_type n, value_type val = value_type());
void resize (size_type n);void resize (size_type n, const value_type& val);
更改大小
將容器的大小調整為包含 n 個元素。

如果n小於容器當前的size,則內容將被縮減到前n個元素,並移除超出部分(並銷燬它們)。

如果n大於容器當前的size,則透過在末尾插入所需數量的元素來擴充套件內容,以達到n的大小。如果指定了val,則新元素將初始化為val的副本;否則,它們將被值初始化。

如果n也大於容器當前的capacity,則將發生已分配儲存空間的自動重新分配。

請注意,此函式透過插入或刪除元素來更改容器的實際內容。

引數

n
新的容器大小,以元素數量表示。
成員型別size_type是一種無符號整型型別。
val
n大於容器當前的size時,用於複製到新增元素的物件。
如果未指定,則使用預設建構函式。
成員型別value_type是容器中元素的型別,在vector中定義為第一個模板引數(T).

返回值



如果發生重新分配,儲存將使用容器的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
// resizing vector
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;

  // set some initial content:
  for (int i=1;i<10;i++) myvector.push_back(i);

  myvector.resize(5);
  myvector.resize(8,100);
  myvector.resize(12);

  std::cout << "myvector contains:";
  for (int i=0;i<myvector.size();i++)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';

  return 0;
}

輸出
myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0


複雜度

線上性時間內完成,具體取決於插入/刪除的元素數量(構造/析構)。

如果發生重新分配,則重新分配本身最多需要線性於整個vector size的時間。

迭代器有效性

如果容器縮小,所有未被移除的元素的迭代器、指標和引用在resize後保持有效,並指向呼叫前它們所指向的相同元素。

如果容器擴充套件,則end迭代器將失效;如果需要重新分配儲存,則與此容器相關的所有迭代器、指標和引用都將失效。

資料競爭

容器將被修改。
如果發生重新分配,則所有包含的元素都將被修改。
否則,n之前的元素不會被訪問,同時訪問或修改它們是安全的。

異常安全

如果n小於或等於容器的size,該函式永遠不會丟擲異常(無異常保證)。
如果n更大且發生重新分配,在異常發生時,如果元素的型別是“可複製”或“無異常可移動”的,則容器將保持有效狀態(強保證)。
否則,如果丟擲異常,容器將保持有效狀態(基本保證)。

另見