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) |
создает новый адаптер итераторов (публичная функция-член) |
|
(C++20) |
присваивает другой адаптер итераторов (публичная функция-член) |
|
(C++20) |
доступ к элементу, на который указывает итератор (публичная функция-член) |
|
(C++20) |
перемещает адаптер итератора вперед (публичная функция-член) |
Члены-объекты
| Название члена | Определение |
|---|---|
var (приватный) |
объект типа std::variant<I, S>, имя используется только для демонстрации |
Функции, не являющиеся членами
|
(C++20) |
сравнивает основанные итераторы или барьеры (шаблон функции) |
|
(C++20) |
вычисляет расстояние между двумя адаптерами итераторов (шаблон функции) |
|
(C++20) |
приводит результат обращeния к элементу с помощью итератора к связанному типу ссылкe-свойству значения (функция) |
|
(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:2023):
- 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/w/cpp/iterator/common_iterator