Namespaces
Variants

std::ranges::concat_view<Views...>:: iterator

From cppreference.net
Ranges library
Range adaptors
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) ( только для иллюстрации* )
1) ranges:: concat_view < Views... > :: iterator является типом итераторов, возвращаемых begin() и end() для ranges:: concat_view < Views... > .
2) Пусть Fs будет пакетом, состоящим из всех элементов Rs за исключением последнего элемента. Эквивалентно

template < bool Const, class ... Rs >
concept concat-is-random-access = // только для пояснения
all-random-access  < Const, Rs... > &&
( ranges:: common_range < maybe-const  < Const, Fs >> && ... ) ;

.
3) Пусть 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 < maybe-const  < Const, Views >> ... >

Определение концепции итератора

iterator_concept определяется следующим образом:

Определение категории итератора

iterator_category определяется тогда и только тогда, когда all-forward  < Const, Views... > удовлетворяет требованиям. В этом случае оно определяется следующим образом:

Члены данных

Участник Определение
maybe-const  < Const, ranges:: concat_view > * parent_ указатель на родительский concat_view
( объект-член только для демонстрации* )
base-iter it_ итератор в текущее представление
( объект-член только для демонстрации* )

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

создает итератор
(публичная функция-член)
получает доступ к элементу
(публичная функция-член)
получает доступ к элементу по индексу
(публичная функция-член)
перемещает или уменьшает базовый итератор
(публичная функция-член)
Шаблоны функций только для экспозиции
заменяет it_ началом следующего представления, если it_ является концом текущего представления
( функция-член только для экспозиции* )
уменьшает it_ так, чтобы он указывал на предыдущую позицию
( функция-член только для экспозиции* )
перемещает текущую позицию на заданное смещение
( функция-член только для экспозиции* )
уменьшает текущую позицию на заданное значение
( функция-член только для экспозиции* )

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

сравнивает базовые итераторы
(функция)
выполняет арифметические операции с итераторами
(функция)
(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]