std::
forward_list::resize
公众成员函数 <forward_list>
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是容器中元素的类型,在forward_list中定义为第一个模板形参(T)的别名。
☉ 返回值
none
在增长的情况下,新元素的存储是使用allocator_traits<allocator_type>::construct()分配的,
如果失败可能会抛出异常(对于默认的分配器,如果分配请求不成功,会抛出bad_alloc)。
☣ 示例
// resizing forward_list
#include <iostream>
#include <forward_list>
int main ()
{
std::forward_list<int> mylist = {10, 20, 30, 40, 50};
// 10 20 30 40 50
mylist.resize(3); // 10 20 30
mylist.resize(5,100); // 10 20 30 100 100
std::cout << "mylist contains:";
for (int& x: mylist) std::cout << ' ' << x;
std::cout << '\n';
return 0;
} |
输出:
mylist contains: 10 20 30 100 100
✥ 复杂度
插入/删除元素的数量为线性(构造函数/析构函数),大小为线性(迭代器推进)。
☣ 迭代器的有效性
指向被函数删除的元素的迭代器、指针和引用将失效
所有其他迭代器、指针和引用都保持其有效性。
⇄ 数据竞争
容器被修改
删除的元素被修改。并发访问或修改其他元素是安全的。
☂ 异常安全性
如果该操作减少了容器的大小,则函数永远不会抛出异常(no-throw保证)。
否则,如果抛出异常,容器将保留一个有效状态(基本保证):构造元素或分配存储空间都可能引发异常。
🍄 另请参阅
forward_list::clear |
清除内容(公共成员函数) |
forward_list::erase_after |
删除元素 (公共成员函数) |
forward_list::insert_after |
插入元素 (公共成员函数) |
forward_list::max_size |
返回最大元素个数 (公共成员函数) |
forward_list::remove |
删除具有特定值的元素 (公共成员函数) |
forward_list::merge |
合并已排序的容器 (公共成员函数) |