C++官网参考链接:https://cplusplus.com/reference/deque/deque/resize/
公有成员函数
<deque>
std::deque::resize
C++98
void resize (size_type n, value_type val = value_type());
C++11
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)分配新元素的存储空间,这可能在失败时抛出异常(对于默认的分配器(allocator),如果分配请求不成功,则抛出bad_alloc)。
用例
// 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的初始内容。然后,它首先使用resize将容器大小设置为5,然后将其大小扩展为8,并对于新元素使用值100,最后将其大小扩展为12,并使用默认值(对于int型元素,这是0)。输出:
复杂度
在插入/删除(构造/析构)的元素数量上是线性的。
迭代器有效性
在容器收缩的情况下,在resize后所有未被删除的迭代器、指针和对元素的引用仍然有效,并引用调用之前引用的相同元素。
如果容器扩展,所有迭代器都无效,但现有的指针和引用仍然有效,指向它们之前引用的相同元素。
数据竞争
容器被修改。
删除的元素被修改(参见上面的迭代器有效性)。
异常安全
如果n小于或等于容器的size,则函数永远不会抛出异常(无抛出保证)。
否则,如果抛出异常,则容器将保留有效状态(基本保证):构造元素或分配存储都可能抛出。