std::
forward_list::emplace_after
公众成员函数 <forward_list>
template <class... Args>
iterator emplace_after (const_iterator position, Args&&... args);
构造并插入元素
通过在position的元素之后插入一个新元素来扩展容器。这个新元素使用args作为其构造的参数构造.
容器的大小加1
与其他标准序列容器不同,list和forward_list对象被专门设计为在任意位置高效地插入和删除元素,
即使是在序列的中间。
要将元素放置在forward_list的开头,可以使用成员函数emplace_front,
或者以before_begin作为位置调用该函数。
元素是通过调用allocator_traits::construct和传递的参数构造的。
存在一个类似的成员函数insert_after,它可以将现有对象复制或移动到容器中。
☲ 参数
-
position
-
在容器中插入新元素的位置。
成员类型const_iterator是指向const元素的前向迭代器类型。
-
args
-
为构造新元素而传递的参数。
☉ 返回值
指向新放置的元素的迭代器。
成员类型iterator 是指向元素的前向迭代器类型。
新元素的存储是使用allocator_traits<allocator_type>::construct()分配的,
如果失败,可能会抛出异常(对于默认的分配器,如果分配请求不成功,会抛出bad_alloc)。
☣ 示例
// forward_list::emplace_after
#include <iostream>
#include <forward_list>
int main ()
{
std::forward_list< std::pair<int,char> > mylist;
auto it = mylist.before_begin();
it = mylist.emplace_after ( it, 100, 'x' );
it = mylist.emplace_after ( it, 200, 'y' );
it = mylist.emplace_after ( it, 300, 'z' );
std::cout << "mylist contains:";
for (auto& x: mylist)
std::cout << " (" << x.first << "," << x.second << ")";
std::cout << '\n';
return 0;
} |
输出:
mylist contains: (100,x) (200,y) (300,z)
✥ 复杂度
常量
☣ 迭代器的有效性
没有改变.
⇄ 数据竞争
容器被修改。
不访问所包含的元素:并发访问或修改它们是安全的,尽管迭代包含位置的范围是不安全的。
☂ 异常安全性
强保证:如果抛出异常,容器中没有任何变化。
如果相应的参数不支持allocator_traits::construct,或者如果position无效,它将导致未定义的行为。
🍄 另请参阅
forward_list::emplace_front |
构造并在开头插入元素(公众成员函数) |
forward_list::insert_after |
插入元素 (公众成员函数) |
forward_list::splice_after |
从另一个forward_list转移元素(公众成员函数) |
forward_list::erase_after |
删除元素(公众成员函数) |
forward_list::assign |
分配容器的内容(公众成员函数) |