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< |
[编辑] 确定迭代器概念
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_ (仅用于说明的成员函数*) | |
递减 it_ 使其指向前一个位置(仅用于说明的成员函数*) | |
根据给定偏移量向前移动当前位置 (仅用于说明的成员函数*) | |
根据给定值向后移动当前位置 (仅用于说明的成员函数*) |
[编辑] 非成员函数
比较底层迭代器 (函数) | |
(C++26) |
执行迭代器运算 (函数) |
(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]
- 26.7.18.3 类模板