Namespaces
Variants

std::ranges::concat_view<Представления...>::iterator

С ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
template< bool Const >
class /*iterator*/
(1) (только для пояснения*)
Вспомогательные концепции
template< bool Const, class... Rs >
concept /*concat-is-random-access*/ = /* see description */;
(2) (только для пояснения*)
template< bool Const, class... Rs >
concept /*concat-is-bidirectional*/ = /* see description */;
(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 = // exposition only
    all-random-access <Const, Rs...> &&
    (ranges::common_range<maybe-const <Const, Fs>> && ...);

.
3) Пусть Fs будет набором, состоящим из всех элементов Rs кроме последнего. Эквивалентно

template<bool Const, class... Rs>
concept concat-is-bidirectional = // exposition only
    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]