Namensräume
Varianten
Aktionen

std::ranges::filter_view<V,Pred>::iterator

Von cppreference.com
< cpp‎ | ranges‎ | filter view
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
class /*iterator*/;
(seit C++20)
(nur Exposition*)

Der Rückgabetyp von filter_view::begin.

Dies ist ein bidirectional_iterator, wenn V bidirectional_range modelliert, ein forward_iterator, wenn V forward_range modelliert, und andernfalls ein input_iterator.

Eine Modifikation des Elements, auf das dieser Iterator zeigt, ist erlaubt, führt jedoch zu undefiniertem Verhalten, wenn der resultierende Wert nicht die Bedingung des Filters erfüllt.

Inhalt

[edit] Member types

Typ Definition
iterator_concept
iterator_category
(nur vorhanden, wenn V modelliert
forward_range)

Sei C der Typ std::iterator_traits<ranges::iterator_t<V>>::iterator_category.

value_type ranges::range_value_t<V>
difference_type ranges::range_difference_t<V>

[edit] Data members

Mitglied Beschreibung
ranges::iterator_t<V> current_ (private) ein Iterator in der zugrundeliegenden view
((exposition-only member object*)
ranges::filter_view<V, Pred>* parent_ (private) ein Zeiger auf das Elternobjekt filter_view
((exposition-only member object*)

[edit] Member functions

Konstruiert einen Iterator
(öffentliche Memberfunktion)
gibt den zugrundeliegenden Iterator zurück
(öffentliche Memberfunktion)
leitet an den zugrundeliegenden Iterator weiter
(öffentliche Memberfunktion)
bewegt den Iterator vorwärts
(öffentliche Memberfunktion)
dekrementiert den Iterator
(öffentliche Memberfunktion)

std::ranges::filter_view::iterator::iterator

/*iterator*/()
    requires std::default_initializable<ranges::iterator_t<V>> = default;
(1) (seit C++20)
constexpr /*iterator*/( filter_view& parent,
                        ranges::iterator_t<V> current );
(2) (seit C++20)
1) Initialisiert current_ und parent_ mit ihren Standard-Member-Initialisierern, welche = ranges::iterator_t<V>() und = nullptr sind.
2) Initialisiert current_ mit std::move(current) und parent_ mit std::addressof(parent).

std::ranges::filter_view::iterator::base

constexpr const ranges::iterator_t<V>& base() const & noexcept;
(1) (seit C++20)
constexpr ranges::iterator_t<V> base() &&;
(2) (seit C++20)
1) Äquivalent zu return current_;.
2) Äquivalent zu return std::move(current_);.

std::ranges::filter_view::iterator::operator*,->

constexpr ranges::range_reference_t<V> operator*() const;
(1) (seit C++20)
constexpr ranges::iterator_t<V> operator->() const

    requires /*has-arrow*/<ranges::iterator_t<V>> &&

             std::copyable<ranges::iterator_t<V>>;
(2) (seit C++20)
1) Äquivalent zu return *current_;.
2) Äquivalent zu return current_;.

Für einen Typ I wird /*has-arrow*/<I> modelliert oder erfüllt, wenn und nur wenn I input_iterator modelliert oder erfüllt, und entweder I ein Zeigertyp ist oder requires(I i){ i.operator->();} wahr ist.

std::ranges::filter_view::iterator::operator++

constexpr /*iterator*/& operator++();
(1) (seit C++20)
constexpr void operator++( int );
(2) (seit C++20)
constexpr /*iterator*/ operator++( int )
    requires ranges::forward_range<V>;
(3) (seit C++20)
1) Äquivalent zu
current_ = ranges::find_if(std::move(++current_), ranges::end(parent_->base_),
                           std::ref(*parent_->pred_));
return *this;
.
2) Äquivalent zu ++*this;.
3) Äquivalent zu auto tmp = *this; ++*this; return tmp;.

std::ranges::filter_view::iterator::operator--

constexpr /*Iterator*/& operator--()
    requires ranges::bidirectional_range<V>;
(1) (seit C++20)
constexpr /*Iterator*/ operator--( int )
    requires ranges::bidirectional_range<V>;
(2) (seit C++20)
1) Äquivalent zu
do
    --current_;
while (!std::invoke(*parent_->pred_, *current_));
return *this;
.
2) Äquivalent zu auto tmp = *this; --*this; return tmp;.

[edit] Non-member functions

vergleicht die zugrundeliegenden Iteratoren
(Funktion)
(C++20)
castet das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen rvalue-Referenztyp
(Funktion)
(C++20)
tauscht die Objekte, auf die zwei zugrundeliegende Iteratoren zeigen
(Funktion)

operator==(std::ranges::filter_view::iterator)

friend constexpr bool operator==( const /*iterator*/& x, const /*iterator*/& y )
    requires std::equality_comparable<ranges::iterator_t<V>>;
(seit C++20)

Äquivalent zu return x.current_ == y.current_;.

Der Operator != wird aus operator== synthetisiert.

Diese Funktion ist nicht für die normale unqualifizierte oder qualifizierte Suche sichtbar und kann nur durch Argument-abhängige Suche gefunden werden, wenn std::ranges::filter_view::iterator eine zugehörige Klasse der Argumente ist.

iter_move(std::ranges::filter_view::iterator)

friend constexpr ranges::range_rvalue_reference_t<V>

iter_move( const /*iterator*/& i )

    noexcept(noexcept(ranges::iter_move(i.current_)));
(seit C++20)

Äquivalent zu return ranges::iter_move(i.current_);.

Diese Funktion ist nicht für die normale unqualifizierte oder qualifizierte Suche sichtbar und kann nur durch Argument-abhängige Suche gefunden werden, wenn std::ranges::filter_view::iterator eine zugehörige Klasse der Argumente ist.

iter_swap(std::ranges::filter_view::iterator)

friend constexpr void iter_swap( const /*iterator*/& x, const /*iterator*/& y )

    noexcept(noexcept(ranges::iter_swap(x.current_, y.current_)))

        requires std::indirectly_swappable<ranges::iterator_t<V>>;
(seit C++20)

Äquivalent zu ranges::iter_swap(x.current_, y.current_).

Diese Funktion ist nicht für die normale unqualifizierte oder qualifizierte Suche sichtbar und kann nur durch Argument-abhängige Suche gefunden werden, wenn std::ranges::filter_view::iterator eine zugehörige Klasse der Argumente ist.

[edit] Defect reports

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
P2259R1 C++20 Der Member-Typ iterator_category war immer definiert nur definiert, wenn V ein forward_range ist
LWG 3533 C++20 die base-Überladung für const& kopierte den zugrundeliegenden Iterator liefert eine Referenz darauf
LWG 3593 C++20 die base-Überladung für const& war möglicherweise nicht noexcept wurde zu `noexcept` gemacht