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以降)
(constexpr C++26以降) |
|
指定された位置の後に新しい要素をコンテナに挿入します。要素はその場で構築され、コピーや移動操作は行われません。要素のコンストラクタは、関数に提供された引数と全く同じ引数で呼び出されます。
以下のいずれかの条件が満たされる場合、動作は未定義です:
-
Tは EmplaceConstructible ではなく、forward_listに std:: forward < Args > ( args ) ... から構築できません。 -
pos
が範囲
[before_begin(),end())内にありません。
イテレータや参照は無効化されません。
目次 |
パラメータ
| 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) |