Spec-Zone.ru › C++

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

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<boolConst,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<boolConst,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 определяется следующим образом:

  • Если удовлетворяется 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.

Поля данных

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

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

(constructor)
создаёт итератор
(открытая функция-член)
operator*
получает доступ к элементу
(открытая функция-член)
operator[]
получает доступ к элементу по индексу
(открытая функция-член)
operator++operator++(int)operator--operator--(int)operator+=operator-=
перемещает базовый итератор вперёд или назад
(открытая функция-член)
Шаблоны функций, используемые только для иллюстрации
satisfy
заменяет it_ началом следующего представления, если it_ является концом текущего представления
(функция-член, используемая только для иллюстрации*)
prev
перемещает it_ назад так, чтобы он указывал на предыдущую позицию
(функция-член, используемая только для иллюстрации*)
advance-fwd
перемещает текущую позицию на заданное смещение
(функция-член, используемая только для иллюстрации*)
advance-bwd
перемещает текущую позицию назад на заданную величину
(функция-член, используемая только для иллюстрации*)

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

operator==operator<operator>operator<=operator>=operator<=>
(C++26)
сравнивает базовые итераторы
(функция)
operator+operator-
(C++26)
выполняет арифметические операции с итераторами
(функция)
iter_move
(C++26)
приводит результат разыменования базового итератора к соответствующему ему типу rvalue-ссылки
(функция)
iter_swap
(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]

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/concat_view/iterator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API