std::
list::resize
公众成员函数 <list>
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是一个unsigned整型。
-
val
-
对象,当n大于当前容器大小时,将其内容复制到添加的元素中。
如果没有指定,则使用默认构造函数。
成员类型value_type是容器中元素的类型,在列表中定义为第一个模板形参(T)的别名。
☉ 返回值
none
在增长的情况下,使用容器的分配器分配新元素的存储,
失败时可能抛出异常(对于默认分配器,如果分配请求没有成功,则抛出bad_alloc)。
☣ 示例
// 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
✥ 复杂度
如果容器增长,则插入的元素数量为线性(构造函数)。
如果容器收缩,则删除元素的数量线性增加(析构),大小线性增加(迭代器前进)。
☣ 迭代器的有效性
指向被函数移除元素的迭代器、指针和引用将失效。
所有其他迭代器、指针和引用保持其有效性。
⇄ 数据竞争
容器修改。
删除的元素被修改。同时访问或修改其他元素是安全的。
☂ 异常安全性
如果该操作减少了容器的大小,则函数永远不会抛出异常(无抛出保证)。
否则,如果抛出异常,容器将保留一个有效状态(基本保证):构造元素或分配存储时可能抛出异常。
🍄 另请参阅
list::size |
删除最后一个元素(公众成员函数) |
list::clear |
删除第一个元素(公众成员函数) |
list::erase |
按值删除元素(公众成员函数) |
list::max_size |
删除重复的值(公众成员函数) |