std::
deque::resize
公众成员函数 <deque>
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小于当前容器的大小,则将内容减少到其前n个元素,并删除(并销毁)超过的元素。
如果n大于当前容器的大小,则在容器的末尾插入足够多的元素来扩展容器的内容,使容器的大小达到n。
如果指定了val,则将新元素初始化为val的副本,否则将对它们进行值初始化。
注意,这个函数通过插入或删除元素来改变容器的实际内容。
☲ 参数
-
n
-
新的容器大小,以元素的数量表示。
成员类型size_type是一个无符号整型。
-
val
-
对象,如果n大于当前容器大小,则将其内容复制到添加的元素中。
如果未指定,则使用默认构造函数。
成员类型value_type是容器中元素的类型,在deque中定义为第一个模板形参(T)的别名。
☉ 返回值
none。
在增长的情况下,使用容器的分配器分配新元素的存储空间,这可能在失败时抛出异常
(对于默认的分配器,如果分配请求不成功,会抛出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元素,这是零)。
输出:
mydeque contains: 1 2 3 4 5 100 100 100 0 0 0 0
✥ 复杂度
与插入/删除的元素数量(构造/析构)成线性关系。
☣ 迭代器的有效性
在容器减小的情况下,所有指向未删除元素的迭代器、指针和引用在调整大小后仍然有效,
并指向它们在调用前引用的相同元素。
如果容器增加,则所有迭代器失效,但现有的指针和引用仍然有效,它们指向的元素与之前相同。
⇄ 数据竞争
容器被修改。
删除的元素将被修改(参见上面的迭代器有效性)。
☂ 异常安全性
如果n小于或等于容器的大小,函数永远不会抛出异常(no-throw保证)。
否则,如果抛出异常,容器将保留一个有效状态(基本保证):构造元素或分配存储空间都可能引发异常。
🍄 另请参阅
deque::size |
返回元素数量(公众成员函数) |
deque::clear |
清除内容 (公众成员函数) |
deque::erase |
删除元素 (公众成员函数) |
deque::max_size |
返回最大元素个数(公众成员函数) |