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更大且发生重新分配,在异常发生时,如果元素的类型是“可复制”或“无异常可移动”的,则容器将保持有效状态(强保证)。
否则,如果抛出异常,容器将保持有效状态(基本保证)。

另见