public member function
<deque>

std::deque::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是在容器中元素的型別,在 deque 中定義為第一個模板引數(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 deque
#include <iostream>
#include <deque>

int main ()
{
  std::deque<int> mydeque;
  std::deque<int>::iterator it;

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

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

  std::cout << "mydeque contains:";
  for (std::deque<int>::iterator it = mydeque.begin(); it != mydeque.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

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


複雜度

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

迭代器有效性

如果容器收縮,所有未被移除的元素的迭代器、指標和引用在 resize 操作後仍然有效,並指向呼叫前它們所指向的相同元素。
如果容器擴充套件,所有迭代器都會失效,但現有的指標和引用仍然有效,指向呼叫前它們所指向的相同元素。

資料競爭

容器被修改。
已移除的元素被修改(請參閱上方的*迭代器有效性*)。

異常安全

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

另見