名前空間
変種
操作

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

From cppreference.com
 
 
 
 
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

[編集] 関連項目

指定した要素の直後に要素を挿入する
(public member function) [編集]
English 日本語 中文(简体) 中文(繁體)