Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
template < bool Const >
class /*iterator*/
(1) ( 仅用于说明* )
辅助概念
template < bool Const, class ... Rs >
concept /*concat-is-random-access*/ = /* 见描述 */ ;
(2) ( 仅用于说明* )
template < bool Const, class ... Rs >
concept /*concat-is-bidirectional*/ = /* 见描述 */ ;
(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 = // 仅用于说明
all-random-access  < Const, Rs... > &&
( ranges:: common_range < maybe-const  < Const, Fs >> && ... ) ;

.
3) Fs 为包含 Rs 中除最后一个元素外所有元素的包。等价于

template < bool Const, class ... Rs >
concept concat-is-bidirectional = // 仅用于说明
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]