std:: common_iterator
|
Определено в заголовочном файле
<iterator>
|
||
|
template
<
std::
input_or_output_iterator
I,
std::
sentinel_for
<
I
>
S
>
требует
(
!
std::
same_as
<
I, S
>
&&
std::
copyable
<
I
>
)
|
(начиная с 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]
Смотрите также
|
(C++20)
|
определяет, что диапазон имеет идентичные типы итератора и стражника
(концепт) |
преобразует
view
в
common_range
(шаблон класса) (объект адаптера диапазона) |