Spec-Zone.ru › C++

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> )
        class common_iterator;
(с C++20)

std::common_iterator это адаптер итераторов/барьеров I, который может представлять несовместный диапазон (где типы I и S отличаются) как common_range, содержащий либо итератор, либо барьер, и определяющий соответствующие операторы сравнения на равенство operator==.
std::common_iterator может использоваться в качестве «моста» между последовательностями, представленными парой итератор/барьер, и устаревшими функциями, которые ожидают common_range-подобные последовательности.

Члены-функции

(конструктор)
(C++20)
создает новый адаптер итераторов
(публичная функция-член)
operator=
(C++20)
присваивает другой адаптер итераторов
(публичная функция-член)
operator*operator->
(C++20)
доступ к элементу, на который указывает итератор
(публичная функция-член)
operator++operator++(int)
(C++20)
перемещает адаптер итератора вперед
(публичная функция-член)

Члены-объекты

Название члена Определение
var (приватный) объект типа std::variant<I, S>, имя используется только для демонстрации

Функции, не являющиеся членами

operator==
(C++20)
сравнивает основанные итераторы или барьеры
(шаблон функции)
operator-
(C++20)
вычисляет расстояние между двумя адаптерами итераторов
(шаблон функции)
iter_move
(C++20)
приводит результат обращeния к элементу с помощью итератора к связанному типу ссылкe-свойству значения
(функция)
iter_swap
(C++20)
меняет местами объекты, на которые указывают два основанные итератора
(шаблон функции)

Вспомогательные классы

std::incrementable_traits<std::common_iterator>
(C++20)
вычисляет связанный тип разности для типа std::common_iterator
(специализация шаблона класса)
std::iterator_traits<std::common_iterator>
(C++20)
обеспечивает единообразный интерфейс для свойств типа 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:2023):
    • 23.5.5 Общие итераторы [iterators.common]
  • Стандарт C++20 (ISO/IEC 14882:2020):
    • 23.5.4 Общие итераторы [iterators.common]

См. также

ranges::common_range
(C++20)
определяет, что диапазон имеет одинаковые типы итераторов и барьеров
(концепция)
ranges::common_viewviews::common
(C++20)
преобразует view в common_range
(шаблон класса) (объект адаптера диапазона)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/common_iterator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API