命名空间
变体
操作

std::common_iterator

来自 cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
迭代器原语
算法概念和实用程序
间接可调用概念
常见算法需求
(C++20)
(C++20)
(C++20)
实用程序
(C++20)
迭代器适配器
common_iterator
(C++20)

范围访问
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
 
在头文件 <iterator> 中定义
template< std::input_or_output_iterator I, std::sentinel_for<I> S >

    requires ( !std::same_as<I, S> && std::copyable<I> )

class common_iterator;
(自 C++20 起)

std::common_iterator 是一个迭代器 I/哨兵 S 适配器,它可以将一个非通用范围(其中 IS 的类型不同)表示为一个 common_range,方法是包含一个迭代器或哨兵,并定义适当的相等比较运算符 operator==.

std::common_iterator 可用作表示由迭代器/哨兵对表示的序列和期望 common_range 类序列的传统函数之间的“桥梁”。

内容

[edit] 数据成员

成员名称 定义
var 类型为 std::variant<I, S> 的对象
(仅供说明*)

[edit] 成员函数

构造一个新的迭代器适配器
(公有成员函数) [edit]
(C++20)
分配另一个迭代器适配器
(公有成员函数) [edit]
访问所指向的元素
(公有成员函数) [edit]
推进迭代器适配器
(公有成员函数) [edit]

[edit] 非成员函数

比较底层迭代器或哨兵
(函数模板) [edit]
(C++20)
计算两个迭代器适配器之间的距离
(函数模板) [edit]
(C++20)
将取消引用底层迭代器的结果转换为其关联的右值引用类型
(函数) [edit]
(C++20)
交换两个底层迭代器所指向的对象
(函数模板) [edit]

[edit] 辅助类

计算 std::common_iterator 类型的关联差值类型
(类模板特化) [edit]
std::common_iterator 类型的属性提供统一接口
(类模板特化) [edit]

[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] 另请参见

指定范围具有相同的迭代器和哨兵类型
(概念) [编辑]
视图 转换为 通用范围
(类模板) (范围适配器对象)[编辑]