public member function
<list>

std::list::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
新的容器大小,以元素數量表示。
成員型別size_type是一種無符號整型型別。
val
如果n大於當前容器的size,則用於新增到元素的副本物件。
如果未指定,則使用預設建構函式。
成員型別value_type是容器中元素的型別,在list中定義為第一個模板引數(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
23
// resizing list
#include <iostream>
#include <list>

int main ()
{
  std::list<int> mylist;

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

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

  std::cout << "mylist contains:";
  for (std::list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
    std::cout << ' ' << *it;

  std::cout << '\n';

  return 0;
}

程式碼將一個包含9個數字的序列設定為初始內容mylist。然後它使用resize首先將容器大小設定為5,然後擴充套件其大小到8,其新元素的值為100,最後它將大小擴充套件到12,其預設值為(對於int元素,這是零)。輸出
mylist contains: 1 2 3 4 5 100 100 100 0 0 0 0


複雜度

如果容器增長,則與插入的元素數量成線性關係(建構函式)。
如果容器收縮,則與刪除的元素數量(析構)成線性關係,再加上與size(迭代器前進)成線性關係。

迭代器有效性

指向由函式移除的元素的迭代器、指標和引用將被使失效。
所有其他迭代器、指標和引用保持其有效性。

資料競爭

容器將被修改。
移除的元素將被修改。併發訪問或修改其他元素是安全的。

異常安全

如果操作減小了容器的大小,則函式永遠不會丟擲異常(無丟擲保證)。
否則,如果丟擲異常,容器將保持有效狀態(基本保證):構造元素或分配儲存可能會丟擲。

另見