std::ranges::concat_view<Views...>::iterator
來自 cppreference.com
< cpp | ranges | concat view
template< bool Const > class /*iterator*/ |
(1) | (僅作說明*) |
輔助概念 |
||
template< bool Const, class... Rs > concept /*concat-is-random-access*/ = /* see description */; |
(2) | (僅作說明*) |
template< bool Const, class... Rs > concept /*concat-is-bidirectional*/ = /* see description */; |
(3) | (僅作說明*) |
1) ranges::concat_view<Views...>::
iterator
是由 ranges::concat_view<Views...> 的 begin()
和 end()
返回的迭代器型別。2) 令
Fs
為由 Rs
的所有元素(最後一個元素除外)組成的包。等價於template<bool Const, class... Rs>
concept
concat-is-random-access
= // exposition only
all-random-access
<Const, Rs...> &&
(ranges::common_range<maybe-const
<Const, Fs>> && ...);
3) 令
Fs
為由 Rs
的所有元素(最後一個元素除外)組成的包。等價於template<bool Const, class... Rs>
concept
concat-is-bidirectional
= // exposition only
all-bidirectional
<Const, Rs...> &&
(ranges::common_range<maybe-const
<Const, Fs>> && ...);
目錄 |
[編輯] 模板引數
Const | - | 迭代器是否為常量迭代器 |
[編輯] 巢狀型別
僅用於說明的型別 | |
型別 | 定義 |
base-iter |
std::variant<ranges::iterator_t<maybe-const <Const, Views>>...>(僅供說明的成員型別*) |
迭代器屬性型別 | |
型別 | 定義 |
iterator_concept
|
一個迭代器標籤,見下文 |
iterator_category (有條件存在) |
一個迭代器標籤,見下文 |
value_type
|
concat-value-t <maybe-const <Const, Views>...> |
difference_type
|
std::common_type_t<ranges::range_difference_t< |
[編輯] 確定迭代器概念
iterator_concept
定義如下:
- 如果建模了
concat-is-random-access
<Const, Views...>,則iterator_concept
表示 std::random_access_iterator_tag。 - 否則,如果建模了
concat-is-bidirectional
<Const, Views...>,則iterator_concept
表示 std::bidirectional_iterator_tag。 - 否則,如果建模了
all-forward
<Const, Views...>,則iterator_concept
表示 std::forward_iterator_tag。 - 否則,
iterator_concept
表示 std::input_iterator_tag。
[編輯] 確定迭代器類別
iterator_category
當且僅當建模了 all-forward
<Const, Views...> 時定義。在這種情況下,其定義如下:
- 如果 std::is_reference_v<
concat-reference-t
<maybe-const
<Const, Views>...>> 為 false,則iterator_category
表示 std::input_iterator_tag。 - 否則,令
Cs
表示型別包 std::iterator_traits<ranges::iterator_t<maybe-const
<Const, Views>>>::iterator_category...- 如果 (std::derived_from<Cs, std::random_access_iterator_tag> && ...) &&
concat-is-random-access
<Const, Views...> 為 true,則iterator_category
表示 std::random_access_iterator_tag。 - 否則,如果 (std::derived_from<Cs, std::bidirectional_iterator_tag> && ...) &&
concat-is-bidirectional
<Const, Views...> 為 true,則iterator_category
表示 std::bidirectional_iterator_tag。 - 否則,如果 (std::derived_from<Cs, std::forward_iterator_tag> && ...) 為 true,則
iterator_category
表示 std::forward_iterator_tag。 - 否則,
iterator_category
表示 std::input_iterator_tag。
- 如果 (std::derived_from<Cs, std::random_access_iterator_tag> && ...) &&
[編輯] 資料成員
成員 | 定義 |
maybe-const <Const, ranges::concat_view>* parent_ |
指向父 concat_view 的指標(僅用於闡釋的成員物件*) |
base-iter it_ |
當前檢視的迭代器 (僅用於闡釋的成員物件*) |
[編輯] 成員函式
構造一個迭代器 (公開成員函式) | |
訪問元素 (公開成員函式) | |
透過索引訪問元素 (公開成員函式) | |
前進或後退底層迭代器 (公有成員函式) | |
僅用於說明的函式模板 | |
如果 it_ 是當前檢視的末尾,則將其替換為下一個檢視的開頭(僅用於說明的成員函式*) | |
遞減 it_ ,使其指向前一個位置(僅用於說明的成員函式*) | |
將當前位置向前移動給定偏移量 (僅用於說明的成員函式*) | |
將當前位置向後移動給定值 (僅用於說明的成員函式*) |
[編輯] 非成員函式
比較底層迭代器 (函式) | |
(C++26) |
進行迭代器算術 (函式) |
(C++26) |
將底層迭代器解引用的結果轉換為其關聯的右值引用型別 (函式) |
(C++26) |
交換兩個底層迭代器指向的物件 (函式) |
[編輯] 示例
初步版本可在 Compiler Explorer 上檢視。
執行此程式碼
#include <iostream> #include <iterator> #include <ranges> int main() { namespace views = std::views; static constexpr int p[]{1, 2, 3}; static constexpr auto e = {4, 5}; auto t = views::iota(6, 9); auto cat = views::concat(p, e, t); auto dog = views::concat(cat, cat); for (auto i{dog.begin()}; i != std::default_sentinel; ++i) std::cout << *i << ' '; std::cout << '\n'; }
輸出
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
[編輯] 參考
- C++26 標準 (ISO/IEC 14882:2026)
- 26.7.18.3 類模板
concat_view::iterator
[range.concat.iterator]
- 26.7.18.3 類模板