Namespaces
Variants

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

From cppreference.net
template < class ... Args >
iterator emplace_after ( const_iterator pos, Args && ... args ) ;
(自 C++11 起)
(自 C++26 起为 constexpr)

在容器中指定位置之后插入一个新元素。该元素是原地构造的,即不执行复制或移动操作。元素的构造函数将以与传递给函数完全相同的参数被调用。

若满足以下任一条件,则行为未定义:

不会使任何迭代器或引用失效。

目录

参数

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

参见

在元素后插入元素
(公开成员函数)