std::inserter
來自 cppreference.com
< cpp | 迭代器 (iterator)
定義於標頭檔案 <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 中指示插入位置的迭代器 |
[編輯] 返回值
一個 std::insert_iterator,可用於將元素插入到容器 c 中由 i 指示的位置。
[編輯] 可能實現
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++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 561 | C++98 | i 的型別獨立於 Container |
它是 Container 的迭代器型別 |
[編輯] 參閱
用於在容器中插入的迭代器介面卡 (類模板) | |
建立從引數推斷型別的std::back_insert_iterator (函式模板) | |
建立從引數推斷型別的std::front_insert_iterator (函式模板) |