std::ranges::concat_view<Views...>:: iterator
|
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) | ( 仅用于说明* ) |
iterator
是
ranges::
concat_view
<
Views...
>
的
begin()
和
end()
所返回迭代器的类型。
Fs
为包含
Rs
中除最后一个元素外所有元素的包。等价于
template
<
bool
Const,
class
...
Rs
>
concept
concat-is-random-access
=
// 仅用于说明
all-random-access
<
Const, Rs...
>
&&
(
ranges::
common_range
<
maybe-const
<
Const, Fs
>>
&&
...
)
;
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 。
确定迭代器类别
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_
使其指向前一位置
( 仅用于说明的成员函数* ) |
|
|
按指定偏移量前进当前位置
( 仅用于说明的成员函数* ) |
|
|
按指定值递减当前位置
( 仅用于说明的成员函数* ) |
|
非成员函数
|
比较底层迭代器
(函数) |
|
|
(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 类模板