std::ranges::concat_view<Views...>:: iterator
|
template
<
bool
Const
>
class /*iterator*/ |
(1) | ( только для иллюстрации* ) |
|
Вспомогательные концепты
|
||
|
template
<
bool
Const,
class
...
Rs
>
concept /*concat-is-random-access*/ = /* см. описание */ ; |
(2) | ( только для иллюстрации* ) |
|
template
<
bool
Const,
class
...
Rs
>
concept /*concat-is-bidirectional*/ = /* см. описание */ ; |
(3) | ( только для иллюстрации* ) |
iterator
является типом итераторов, возвращаемых
begin()
и
end()
для
ranges::
concat_view
<
Views...
>
.
Fs
будет пакетом, состоящим из всех элементов
Rs
за исключением последнего элемента. Эквивалентно
template
<
bool
Const,
class
...
Rs
>
concept
concat-is-random-access
=
// только для пояснения
all-random-access
<
Const, Rs...
>
&&
(
ranges::
common_range
<
maybe-const
<
Const, Fs
>>
&&
...
)
;
Fs
будет пакетом, состоящим из всех элементов
Rs
за исключением последнего элемента. Эквивалентно
template
<
bool
Const,
class
...
Rs
>
concept
concat-is-bidirectional
=
// только для демонстрации
all-bidirectional
<
Const, Rs...
>
&&
(
ranges::
common_range
<
maybe-const
<
Const, Fs
>>
&&
...
)
;
Содержание |
Параметры шаблона
| Const | - | является ли итератор константным итератором |
Вложенные типы
Типы только для экспозиции |
|
| Тип | Определение |
base-iter
|
std::
variant
<
ranges::
iterator_t
<
maybe-const
<
Const, Views
>>
...
>
( тип-член только для экспозиции* ) |
Типы свойств итератора |
|
| Тип | Определение |
iterator_concept
|
тег итератора, тег итератора , см. ниже |
iterator_category
(условно присутствует) |
тег итератора, см. ниже |
value_type
|
concat-value-t
<
maybe-const
<
Const, Views
>
...
>
|
difference_type
|
std::
common_type_t
<
ranges::
range_difference_t
<
|
Определение концепции итератора
iterator_concept
определяется следующим образом:
-
Если
concat-is-random-access < Const, Views... > выполняется,iterator_conceptобозначает std::random_access_iterator_tag . -
Иначе, если
concat-is-bidirectional < Const, Views... > выполняется,iterator_conceptобозначает std::bidirectional_iterator_tag . -
Иначе, если
all-forward < Const, Views... > выполняется,iterator_conceptобозначает std::forward_iterator_tag . -
Иначе,
iterator_conceptобозначает std::input_iterator_tag .
Определение категории итератора
iterator_category
определяется тогда и только тогда, когда
all-forward
<
Const, Views...
>
удовлетворяет требованиям. В этом случае оно определяется следующим образом:
-
Если
std::
is_reference_v
<
concat-reference-t <maybe-const < Const, Views > ... >> равно false ,iterator_categoryобозначает std::input_iterator_tag . -
Иначе, пусть
Csобозначает пакет типов std:: iterator_traits < ranges:: iterator_t <maybe-const < Const, Views >>> :: iterator_category ... :-
Если
(
std::
derived_from
<
Cs,
std::
random_access_iterator_tag
>
&&
...
)
&&
concat-is-random-access < Const, Views... > равно true ,iterator_categoryобозначает std::random_access_iterator_tag . -
Иначе, если
(
std::
derived_from
<
Cs,
std::
bidirectional_iterator_tag
>
&&
...
)
&&
concat-is-bidirectional < Const, Views... > равно true ,iterator_categoryобозначает std::bidirectional_iterator_tag . -
Иначе, если
(
std::
derived_from
<
Cs,
std::
forward_iterator_tag
>
&&
...
)
равно
true
,
iterator_categoryобозначает std::forward_iterator_tag . -
Иначе,
iterator_categoryобозначает std::input_iterator_tag .
-
Если
(
std::
derived_from
<
Cs,
std::
random_access_iterator_tag
>
&&
...
)
&&
Члены данных
| Участник | Определение |
maybe-const
<
Const,
ranges::
concat_view
>
*
parent_
|
указатель на родительский
concat_view
( объект-член только для демонстрации* ) |
base-iter
it_
|
итератор в текущее представление
( объект-член только для демонстрации* ) |
Функции-члены
|
создает итератор
(публичная функция-член) |
|
|
получает доступ к элементу
(публичная функция-член) |
|
|
получает доступ к элементу по индексу
(публичная функция-член) |
|
|
перемещает или уменьшает базовый итератор
(публичная функция-член) |
|
Шаблоны функций только для экспозиции |
|
заменяет
it_
началом следующего представления, если
it_
является концом текущего представления
( функция-член только для экспозиции* ) |
|
уменьшает
it_
так, чтобы он указывал на предыдущую позицию
( функция-член только для экспозиции* ) |
|
|
перемещает текущую позицию на заданное смещение
( функция-член только для экспозиции* ) |
|
|
уменьшает текущую позицию на заданное значение
( функция-член только для экспозиции* ) |
|
Функции, не являющиеся членами класса
|
сравнивает базовые итераторы
(функция) |
|
|
(C++26)
|
выполняет арифметические операции с итераторами
(функция) |
|
(C++26)
|
преобразует результат разыменования базового итератора в соответствующий тип rvalue-ссылки
(функция) |
|
(C++26)
|
обменивает объекты, на которые указывают два базовых итератора
(функция) |
Пример
Предварительную версию можно посмотреть на Compiler Explorer .
#include <iostream> #include <iterator> #include <ranges> int main() { namespace views = std::views; static constexpr int p[]{1, 2, 3}; static constexpr auto e = {4, 5}; auto t = views::iota(6, 9); auto cat = views::concat(p, e, t); auto dog = views::concat(cat, cat); for (auto i{dog.begin()}; i != std::default_sentinel; ++i) std::cout << *i << ' '; std::cout << '\n'; }
Вывод:
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
Ссылки
- Стандарт C++26 (ISO/IEC 14882:2026):
-
-
26.7.18.3 Шаблон класса
concat_view::iterator[range.concat.iterator]
-
26.7.18.3 Шаблон класса