std:: common_iterator
|
定义于头文件
<iterator>
|
||
|
template
<
std::
input_or_output_iterator
I,
std::
sentinel_for
<
I
>
S
>
requires
(
!
std::
same_as
<
I, S
>
&&
std::
copyable
<
I
>
)
|
(C++20 起) | |
std::common_iterator
是一种迭代器
I
/ 哨位
S
适配器,可将非公共范围(其中
I
和
S
类型不同)表示为
common_range
,其实现方式是包含一个迭代器或哨位,并定义相应的相等比较运算符
operator
==
。
std::common_iterator
可用作迭代器/哨位对表示的序列与期望
common_range
类序列的传统函数之间的"桥梁"。
目录 |
数据成员
| 成员名称 | 定义 |
var
|
一个类型为
std::
variant
<
I, S
>
的对象
( 仅用于说明的成员对象* ) |
成员函数
构造新的
common_iterator
(公开成员函数) |
|
赋值另一个
common_iterator
(公开成员函数) |
|
|
访问指向的元素
(公开成员函数) |
|
推进
common_iterator
(公开成员函数) |
非成员函数
|
(C++20)
|
比较底层迭代器或哨兵
(函数模板) |
|
(C++20)
|
计算两个迭代器适配器间的距离
(函数模板) |
|
(C++20)
|
将底层迭代器解引用结果转换为其关联的右值引用类型
(函数) |
|
(C++20)
|
交换两个底层迭代器所指向的对象
(函数模板) |
辅助类
|
计算
std::common_iterator
类型的关联差值类型
(类模板特化) |
|
|
为
std::common_iterator
类型的属性提供统一接口
(类模板特化) |
示例
#include <algorithm> #include <iostream> #include <iterator> #include <list> #include <string> template<class ForwardIter> void fire(ForwardIter first, ForwardIter last) { std::copy(first, last, std::ostream_iterator<std::string>{std::cout, " "}); } int main() { std::list<std::string> stars{"Pollux", "Arcturus", "Mira", "Aldebaran", "Sun"}; using IT = std::common_iterator< std::counted_iterator<std::list<std::string>::iterator>, std::default_sentinel_t>; fire(IT(std::counted_iterator(stars.begin(), stars.size() - 1)), IT(std::default_sentinel)); }
输出:
Pollux Arcturus Mira Aldebaran
参考文献
- C++23 标准 (ISO/IEC 14882:2024):
-
- 23.5.5 通用迭代器 [iterators.common]
- C++20 标准 (ISO/IEC 14882:2020):
-
- 23.5.4 通用迭代器 [iterators.common]
参见
|
(C++20)
|
指定一个范围拥有相同的迭代器和哨兵类型
(概念) |
将
view
转换为
common_range
(类模板) (范围适配器对象) |