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以降)
(constexpr C++26以降)

指定された位置の後に新しい要素をコンテナに挿入します。要素はその場で構築され、コピーや移動操作は行われません。要素のコンストラクタは、関数に提供された引数と全く同じ引数で呼び出されます。

以下のいずれかの条件が満たされる場合、動作は未定義です:

イテレータや参照は無効化されません。

目次

パラメータ

pos - 新しい要素が構築される位置を示すイテレータ
args - 要素のコンストラクタに転送される引数

戻り値

新しい要素へのイテレータ。

計算量

定数。

例外

何らかの理由で例外がスローされた場合、この関数は何も効果を持ちません( strong exception safety guarantee )。

この例は、単方向リンクリストを自然な順序(逆順ではなく)で標準的に埋める方法を示しています。

#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

関連項目

要素の後に要素を挿入する
(public member function)