std::common_iterator
来自 cppreference.com
在头文件 <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
类序列的传统函数之间的“桥梁”。
内容 |
[edit] 数据成员
成员名称 | 定义 |
var |
类型为 std::variant<I, S> 的对象 (仅供说明*) |
[edit] 成员函数
(C++20) |
构造一个新的迭代器适配器 (公有成员函数) |
(C++20) |
分配另一个迭代器适配器 (公有成员函数) |
(C++20) |
访问所指向的元素 (公有成员函数) |
(C++20) |
推进迭代器适配器 (公有成员函数) |
[edit] 非成员函数
(C++20) |
比较底层迭代器或哨兵 (函数模板) |
(C++20) |
计算两个迭代器适配器之间的距离 (函数模板) |
(C++20) |
将取消引用底层迭代器的结果转换为其关联的右值引用类型 (函数) |
(C++20) |
交换两个底层迭代器所指向的对象 (函数模板) |
[edit] 辅助类
计算 std::common_iterator 类型的关联差值类型 (类模板特化) | |
为 std::common_iterator 类型的属性提供统一接口 (类模板特化) |
[edit] 示例
运行此代码
#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
[edit] 参考资料
- C++23 标准 (ISO/IEC 14882:2024)
- 23.5.5 通用迭代器 [iterators.common]
- C++20 标准 (ISO/IEC 14882:2020)
- 23.5.4 通用迭代器 [iterators.common]
[edit] 另请参见
(C++20) |
指定范围具有相同的迭代器和哨兵类型 (概念) |
将 视图 转换为 通用范围 (类模板) (范围适配器对象) |