# std::forward_list<T,Allocator>::emplace_after

< cpp‎ | container‎ | forward list

template< class... Args > iterator emplace_after( const_iterator pos, Args&&... args ); |  | (C++11 起)

在容器中的指定位置后插入新元素。原位构造元素，即不进行复制或移动操作。准确地以与提供给函数者相同的参数调用元素的构造函数。

没有引用和迭代器被非法化。

### 参数

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

### 参阅

insert_after (C++11) | 在某个元素后插入新元素 (公开成员函数)