Namespaces
Variants

std:: common_iterator

From ru.cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(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 >

требует ( ! std:: same_as < I, S > && std:: copyable < I > )

class common_iterator ;
(начиная с C++20)

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

std::common_iterator может использоваться как "мост" между последовательностями, представленными парой итератор/страж, и устаревшими функциями, которые ожидают common_range -подобные последовательности.

Содержание

Члены данных

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

Функции-члены

создает новый common_iterator
(public member function)
присваивает другой common_iterator
(public member function)
обращается к указываемому элементу
(public member function)
продвигает common_iterator
(public member function)

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

(C++20)
сравнивает базовые итераторы или сторожа
(шаблон функции)
(C++20)
вычисляет расстояние между двумя адаптерами итераторов
(шаблон функции)
(C++20)
преобразует результат разыменования базового итератора в соответствующий тип rvalue-ссылки
(функция)
(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 Общие итераторы [iterators.common]
  • Стандарт C++20 (ISO/IEC 14882:2020):
  • 23.5.4 Общие итераторы [iterators.common]

Смотрите также

определяет, что диапазон имеет идентичные типы итератора и стражника
(концепт)
преобразует view в common_range
(шаблон класса) (объект адаптера диапазона)