std::forward_list<T,Allocator>:: emplace_after
From cppreference.net
<
cpp
|
container
|
forward list
|
template
<
class
...
Args
>
iterator emplace_after ( const_iterator pos, Args && ... args ) ; |
(自 C++11 起)
(自 C++26 起为 constexpr) |
|
在容器中指定位置之后插入一个新元素。该元素是原地构造的,即不执行复制或移动操作。元素的构造函数将以与传递给函数完全相同的参数被调用。
若满足以下任一条件,则行为未定义:
-
T无法通过 std:: forward < Args > ( args ) ... 置入构造到forward_list中。 -
pos
不在
[before_begin(),end())范围内。
不会使任何迭代器或引用失效。
目录 |
参数
| pos | - | 新元素将构造于其后的迭代器 |
| args | - | 要转发给元素构造函数的参数 |
返回值
指向新元素的迭代器。
复杂度
常量。
异常
若因任何原因抛出异常,此函数不产生任何效果( 强异常安全保证 )。
示例
本示例演示了以自然顺序(而非逆序)规范填充单向链表的方法。
运行此代码
#include <forward_list> #include <iostream> #include <string> struct Sum { std::string remark; int sum; Sum(std::string remark, int sum) : remark{std::move(remark)}, sum{sum} {} void print() const { std::cout << remark << " = " << sum << '\n'; } }; int main() { std::forward_list<Sum> list; auto iter = list.before_begin(); std::string str{"1"}; for (int i{1}, sum{1}; i != 10; sum += i) { iter = list.emplace_after(iter, str, sum); ++i; str += " + " + std::to_string(i); } for (const Sum& s : list) s.print(); }
输出:
1 = 1 1 + 2 = 3 1 + 2 + 3 = 6 1 + 2 + 3 + 4 = 10 1 + 2 + 3 + 4 + 5 = 15 1 + 2 + 3 + 4 + 5 + 6 = 21 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
参见
|
在元素后插入元素
(公开成员函数) |