Namensräume
Varianten
Aktionen

std::ranges::adjacent_view<V,N>::iterator

Von cppreference.com
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
template< bool Const >
class /*iterator*/
(seit C++23)
(nur Exposition*)

Der Rückgabetyp von adjacent_view::begin und von adjacent_view::end, wenn die zugrundeliegende View V eine common_range ist.

Der Typ /*iterator*/<true> wird von den const-qualifizierten Überladungen zurückgegeben. Der Typ /*iterator*/<false> wird von den nicht-const-qualifizierten Überladungen zurückgegeben.

Inhalt

[edit] Member types

Mitgliedertyp Definition
Base (private) const V wenn Const true ist, ansonsten V.
((nur zur Veranschaulichung)*)
iterator_category std::input_iterator_tag
iterator_concept
value_type std::tuple</*REPEAT*/(ranges::range_value_t<Base>, N)...>;
difference_type ranges::range_difference_t<Base>

[edit] Data members

Member-Objekt Definition
current_ (private) std::array<ranges::iterator_t<Base>, N>.
((exposition-only member object*)

[edit] Member functions

Konstruiert einen Iterator
(öffentliche Memberfunktion)
greift auf das Element zu
(öffentliche Memberfunktion)
greift per Index auf ein Element zu
(öffentliche Memberfunktion)
inkrementiert oder dekrementiert die zugrundeliegenden Iteratoren
(public member function) [edit]

[edit] Non-member functions

vergleicht die zugrundeliegenden Iteratoren
(Funktion)
führt Iterator-Arithmetik durch
(Funktion)
(C++23)
castet das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen rvalue-Referenztyp
(Funktion)
(C++23)
tauscht die Objekte, auf die zwei zugrundeliegende Iteratoren zeigen
(Funktion)

[edit] Example

#include <cassert>
#include <concepts>
#include <list>
#include <ranges>
#include <tuple>
#include <utility>
#include <vector>
 
int main()
{
    auto v = std::vector{0, 1, 2, 3, 4, 5};
    auto i = (v | std::views::adjacent<3>).begin();
    using I = decltype(i);
    static_assert(std::same_as<I::value_type, std::tuple<int, int, int>>);
    static_assert(std::same_as<I::iterator_concept, std::random_access_iterator_tag>);
    // some of available operators:
    ++i; i++; --i; i--; i += 2; i -= 2;
    assert(i[2] == std::tuple(2, 3, 4));
    using DI = decltype(*i);
    static_assert(std::same_as<DI, std::tuple<int&, int&, int&>>);
    std::get<1>(*i) = 42; // modifies v[1] via iterator i
    assert(v[1] == 42);
 
    auto l = std::list{0, 1, 2, 3, 4, 5};
    auto j = (l | std::views::adjacent<3>).begin();
    using J = decltype(j);
    static_assert(std::same_as<J::value_type, std::tuple<int, int, int>>);
    static_assert(std::same_as<J::iterator_concept, std::bidirectional_iterator_tag>);
    ++j; --j; j++; j--; // some of available operators
    // j += 2; j -= 2;       // error: these operator are not available
    // std::ignore() = j[1]; //        for bidirectional iterator
}

[edit] References

  • C++23 Standard (ISO/IEC 14882:2024)
  • 26.7.25.3 Class template adjacent_view::iterator [range.adjacent.iterator]

[edit] See also