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(迭代器前进)成线性关系。

迭代器有效性

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

数据竞争

容器将被修改。
移除的元素将被修改。并发访问或修改其他元素是安全的。

异常安全

如果操作减小了容器的大小,则函数永远不会抛出异常(无抛出保证)。
否则,如果抛出异常,容器将保持有效状态(基本保证):构造元素或分配存储可能会抛出。

另见