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,则此函数永远不会抛出异常(无异常保证)。
否则,如果抛出异常,容器将保持有效状态(基本保证):构造元素或分配存储可能会抛出异常。

另见