std::ranges::concat_view<Views...>::iterator
来自 cppreference.cn
< cpp | ranges | concat view
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
是由 begin()
和 end()
返回的迭代器的类型,针对 ranges::concat_view<Views...>。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< |
[编辑] 确定迭代器概念
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。
[编辑] 确定迭代器类别
当且仅当 all-forward
<Const, Views...> 被建模时,iterator_category
才被定义。在这种情况下,其定义如下
- 如果 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) |
交换两个底层迭代器指向的对象 (函数) |
[编辑] 示例
初步版本可以在 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 类模板