std::ranges::filter_view<V,Pred>::iterator
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.
[edit] Member types
| Typ | Definition |
iterator_concept
|
|
iterator_category(nur vorhanden, wenn V modelliertforward_range)
|
Sei
|
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) |
current_ und parent_ mit ihren Standard-Member-Initialisierern, welche = ranges::iterator_t<V>() und = nullptr sind.
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) |
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>> && |
(2) | (seit C++20) |
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) |
current_ = ranges::find_if(std::move(++current_), ranges::end(parent_->base_),
std::ref(*parent_->pred_));
return *this;.
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) |
[edit] Non-member functions
| (C++20) |
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 ) |
(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_))) |
(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 |