名稱空間
變體
操作

std::ranges::concat_view<Views...>::iterator

來自 cppreference.com
< cpp‎ | ranges‎ | concat view
 
 
範圍庫 (Ranges library)
範圍介面卡 (Range adaptors)
 
 
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<maybe-const <Const, Views>>...>

[編輯] 確定迭代器概念

iterator_concept 定義如下:

[編輯] 確定迭代器類別

iterator_category 當且僅當建模了 all-forward <Const, Views...> 時定義。在這種情況下,其定義如下:

[編輯] 資料成員

成員 定義
maybe-const <Const, ranges::concat_view>* parent_ 指向父 concat_view 的指標
(僅用於闡釋的成員物件*)
base-iter it_ 當前檢視的迭代器
(僅用於闡釋的成員物件*)

[編輯] 成員函式

構造一個迭代器
(公開成員函式)
訪問元素
(公開成員函式)
透過索引訪問元素
(公開成員函式)
前進或後退底層迭代器
(公有成員函式) [編輯]
僅用於說明的函式模板
如果 it_ 是當前檢視的末尾,則將其替換為下一個檢視的開頭
(僅用於說明的成員函式*)
遞減 it_,使其指向前一個位置
(僅用於說明的成員函式*)
將當前位置向前移動給定偏移量
(僅用於說明的成員函式*)
將當前位置向後移動給定值
(僅用於說明的成員函式*)

[編輯] 非成員函式

比較底層迭代器
(函式)
進行迭代器算術
(函式)
(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]