std::inserter
From cppreference.com
| ヘッダ <iterator> で定義 |
||
template< class Container > std::insert_iterator<Container> |
(C++20まで) | |
| template< class Container > constexpr std::insert_iterator<Container> |
(C++20以降) | |
inserterは、コンテナcとそのイテレータiの型から推論される型でstd::insert_iteratorを構築するための便利な関数テンプレートです。
目次 |
[編集] パラメータ
| c | - | insert操作をサポートするコンテナ |
| i | - | c内の挿入位置を示すイテレータ |
[編集] 戻り値
iで示された位置にコンテナcへ要素を挿入するために使用できるstd::insert_iterator。
[編集] 実装例
template<class Container> std::insert_iterator<Container> inserter(Container& c, typename Container::iterator i) { return std::insert_iterator<Container>(c, i); } |
[編集] 例
このコードを実行
#include <algorithm> #include <iostream> #include <iterator> #include <set> #include <vector> int main() { std::multiset<int> s{1, 2, 3}; // std::inserter is commonly used with multi-sets std::fill_n(std::inserter(s, s.end()), 5, 2); for (int n : s) std::cout << n << ' '; std::cout << '\n'; std::vector<int> d{100, 200, 300}; std::vector<int> v{1, 2, 3, 4, 5}; // when inserting in a sequence container, insertion point advances // because each std::insert_iterator::operator= updates the target iterator std::copy(d.begin(), d.end(), std::inserter(v, std::next(v.begin()))); for (int n : v) std::cout << n << ' '; std::cout << '\n'; }
出力
1 2 2 2 2 2 2 3 1 100 200 300 2 3 4 5
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 561 | C++98 | iの型はContainerとは独立していた |
Containerのイテレータ型である |
[編集] 関連項目
| コンテナへの挿入のためのイテレータアダプタ (クラステンプレート) | |
| 引数から推論された型の std::back_insert_iterator を作成する (関数テンプレート) | |
| 引数から推論された型の std::front_insert_iterator を作成する (関数テンプレート) |