std::common_iterator
來自 cppreference.com
< cpp | 迭代器 (iterator)
定義於標頭檔案 <iterator> |
||
template< std::input_or_output_iterator I, std::sentinel_for<I> S > requires ( !std::same_as<I, S> && std::copyable<I> ) |
(C++20 起) | |
std::common_iterator
是一個迭代器 I
/ 哨兵 S
介面卡,它可以將一個非公共範圍(其中 I
和 S
的型別不同)表示為 common_range
,透過包含一個迭代器或一個哨兵,並定義適當的相等比較運算子 operator==。
std::common_iterator
可以用作由迭代器/哨兵對錶示的序列與期望 common_range
類序列的傳統函式之間的“橋樑”。
目錄 |
[編輯] 資料成員
成員名稱 (Member name) | 定義 |
var |
型別為 std::variant<I, S> 的物件 (僅用於闡釋的成員物件*) |
[編輯] 成員函式
構造一個新的 common_iterator (public 成員函式) | |
賦值另一個 common_iterator (public 成員函式) | |
訪問指向的元素 (public 成員函式) | |
遞增 common_iterator (public 成員函式) |
[編輯] 非成員函式
(C++20) |
比較底層迭代器或哨兵 (函式模板) |
(C++20) |
計算兩個迭代器介面卡之間的距離 (函式模板) |
(C++20) |
將底層迭代器解引用的結果轉換為其關聯的右值引用型別 (函式) |
(C++20) |
交換兩個底層迭代器指向的物件 (函式模板) |
[編輯] 輔助類
計算 std::common_iterator 型別的關聯差值型別 (類模板特化) | |
為 std::common_iterator 型別的屬性提供統一介面 (類模板特化) |
[編輯] 示例
執行此程式碼
#include <algorithm> #include <iostream> #include <iterator> #include <list> #include <string> template<class ForwardIter> void fire(ForwardIter first, ForwardIter last) { std::copy(first, last, std::ostream_iterator<std::string>{std::cout, " "}); } int main() { std::list<std::string> stars{"Pollux", "Arcturus", "Mira", "Aldebaran", "Sun"}; using IT = std::common_iterator< std::counted_iterator<std::list<std::string>::iterator>, std::default_sentinel_t>; fire(IT(std::counted_iterator(stars.begin(), stars.size() - 1)), IT(std::default_sentinel)); }
輸出
Pollux Arcturus Mira Aldebaran
[編輯] 參考
- C++23 標準 (ISO/IEC 14882:2024)
- 23.5.5 Common iterators [iterators.common]
- C++20 標準 (ISO/IEC 14882:2020)
- 23.5.4 Common iterators [iterators.common]
[編輯] 另請參閱
(C++20) |
指定範圍具有相同的迭代器和哨兵型別 (概念) |
將 view 轉換為 common_range (類模板) (範圍介面卡物件) |