命名空间
变体
操作

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 是由 begin()end() 返回的迭代器类型 ranges::concat_view<Views...>.
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_
(仅用于说明的成员函数*)
递减 it_ 使其指向前一个位置
(仅用于说明的成员函数*)
根据给定偏移量向前移动当前位置
(仅用于说明的成员函数*)
根据给定值向后移动当前位置
(仅用于说明的成员函数*)

[编辑] 非成员函数

比较底层迭代器
(函数)
执行迭代器运算
(函数)
(C++26)
将解引用底层迭代器结果的类型转换为其关联的右值引用类型
(函数)
(C++26)
交换两个底层迭代器指向的对象
(函数)

[编辑] 示例

可以在 编译器资源管理器 上查看初步版本。

#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]