◐ Shell
clean mode source ↗

std::common_iterator - cppreference.com

来自cppreference.com

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 式序列的遗留函数之间的“桥梁”。

数据成员

成员名 定义
var std::variant<I, S> 类型的对象
(仅用于阐述的成员对象*)

成员函数

非成员函数

辅助类

示例

#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]

参阅