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 / сентинела S, который может представлять необщий диапазон (в котором типы I и S различаются) как common_range, храня либо итератор, либо сентинел и определяя соответствующие операторы сравнения на равенство operator==.
std::common_iterator можно использовать как «мост» между последовательностями, представленными парой итератор/сентинел, и устаревшими функциями, которые ожидают последовательности наподобие common_range.
Поля данных
| Имя поля | Определение |
|---|---|
var | объект типа std::variant<I,S> (объект-член, используемый только для описания) |
Функции-члены
создаёт новый common_iterator (открытая функция-член) |
|
присваивает другой common_iterator (открытая функция-член) |
|
| получает доступ к элементу, на который указывает итератор (открытая функция-член) |
|
перемещает common_iterator вперёд (открытая функция-член) |
Функции, не являющиеся членами
|
(C++20) | сравнивает базовые итераторы или сентинелы (шаблон функции) |
|
(C++20) | вычисляет расстояние между двумя адаптерами итераторов (шаблон функции) |
|
(C++20) | приводит результат разыменования базового итератора к соответствующему ему типу rvalue-ссылки (функция) |
|
(C++20) | обменивает местами объекты, на которые указывают два базовых итератора (шаблон функции) |
Вспомогательные классы
|
(C++20) | вычисляет соответствующий тип разности для типа 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:2024):
- 23.5.5 Общие итераторы [iterators.common]
- Стандарт C++20 (ISO/IEC 14882:2020):
- 23.5.4 Общие итераторы [iterators.common]
См. также
|
(C++20) | задаёт требование, согласно которому диапазон имеет одинаковые типы итератора и сентинела (концепт) |
|
(C++20) | преобразует view в common_range(шаблон класса) (объект-адаптер диапазона) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/common_iterator