std::common_iterator

来自cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
(C++20)
(C++20)
(C++20)
工具
(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 适配器,可以通过包含迭代器或哨位之一,并定义适合的比较运算符 operator==,从而将非公共范围(其中 IS 不同)表示成一种 common_range

std::common_iterator 可以作为由迭代器/哨位对所表示的序列与期待 common_range 式序列的遗留函数之间的“桥梁”。

目录

[编辑]数据成员

成员名 定义
varstd::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 Common iterators [iterators.common]
  • C++20 标准(ISO/IEC 14882:2020):
  • 23.5.4 Common iterators [iterators.common]

[编辑]参阅

指定范围拥有相同的迭代器和哨位类型
(概念)[编辑]
转换 viewcommon_range
(类模板)(范围适配器对象)[编辑]
close