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

From cppreference.com
< cpp‎ | ranges‎ | concat view
 
 
Ranges library
Range adaptors
 
 
template< bool Const >
class /*iterator*/
(1) (exposition only*)
Helper concepts
template< bool Const, class... Rs >
concept /*concat-is-random-access*/ = /* see description */;
(2) (exposition only*)
template< bool Const, class... Rs >
concept /*concat-is-bidirectional*/ = /* see description */;
(3) (exposition only*)
1) ranges::concat_view<Views...>::iterator is the type of the iterators returned by begin() and end() of ranges::concat_view<Views...>.
2) Let Fs be the pack that consists of all elements of Rs except the last element. Equivalent to

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) Let Fs be the pack that consists of all elements of Rs except the last element. Equivalent to

template<bool Const, class... Rs>
concept concat-is-bidirectional = // exposition only
    all-bidirectional <Const, Rs...> &&
    (ranges::common_range<maybe-const <Const, Fs>> && ...);

.

Template parameters

Const - whether the iterator is a constant iterator

Nested types

Exposition-only types
Type Definition
base-iter std::variant<ranges::iterator_t<maybe-const <Const, Views>>...>
(exposition-only member type*)
Iterator property types
Type Definition
iterator_concept an iterator tag, see below
iterator_category
(conditionally present)
an iterator tag, see below
value_type concat-value-t <maybe-const <Const, Views>...>
difference_type

std::common_type_t<ranges::range_difference_t<maybe-const <Const, Views>>...>

Determining the iterator concept

iterator_concept is defined as follows:

Determining the iterator category

iterator_category is defined if and only if all-forward <Const, Views...> is modeled. In this case, it is defined as follows:

Data members

Member Definition
maybe-const <Const, ranges::concat_view>* parent_ a pointer to the parent concat_view
(exposition-only member object*)
base-iter it_ an iterator into the current view
(exposition-only member object*)

Member functions

constructs an iterator
(public member function)
accesses the element
(public member function)
accesses an element by index
(public member function)
advances or decrements the underlying iterator
(public member function)
Exposition-only function templates
replaces it_ with the beginning of the next view, if it_ is the end of current view
(exposition-only member function*)
decrements it_ such that it points to the previous position
(exposition-only member function*)
advances the current position on given offset
(exposition-only member function*)
decrements the current position on given value
(exposition-only member function*)

Non-member functions

compares the underlying iterators
(function)
performs iterator arithmetic
(function)
(C++26)
casts the result of dereferencing the underlying iterator to its associated rvalue reference type
(function)
(C++26)
swaps the objects pointed to by two underlying iterators
(function)

Example

The preliminary version can be checked out on 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';
}

Output:

1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8

References

  • C++26 standard (ISO/IEC 14882:2026):
  • 26.7.18.3 Class template concat_view::iterator [range.concat.iterator]