Namespaces
Variants

std::ranges::views::drop_while, std::ranges::drop_while_view

Von de.cppreference.net
 
 
Ranges-Bibliothek
Bereichsadapter
 
 
Definiert in Header <ranges>
template< ranges::view V, class Pred >
    requires ranges::input_range<V> &&
             std::is_object_v<Pred> &&
             std::indirect_unary_predicate<const Pred, ranges::iterator_t<V>>
class drop_while_view
    : public ranges::view_interface<drop_while_view<V, Pred>>
(1) (since C++20)
namespace views {
    inline constexpr /* unspecified */ drop_while = /* unspecified */;
}
(2) (since C++20)
Aufrufsignatur
template< ranges::viewable_range R, class Pred >
    requires /* see below */
constexpr ranges::view auto drop_while( R&& r, Pred&& pred );
(since C++20)
template< class Pred >
constexpr /*range adaptor closure*/ drop_while( Pred&& pred );
(since C++20)
1) Ein Bereichsadapter, der eine view von Elementen aus einer zugrunde liegenden Sequenz darstellt, beginnend beim ersten Element, für das das Prädikat false zurückgibt.
2) RangeAdaptorObject. Der Ausdruck views::drop_while(e, f) ist ausdrucksäquivalent zu drop_while_view(e, f) für alle geeigneten Unterausdrücke e und f.

drop_while_view modelliert die Konzepte contiguous_range, random_access_range, bidirectional_range, forward_range, input_range und common_range, wenn die zugrunde liegende view V die entsprechenden Konzepte modelliert. Sie modelliert auch sized_range, falls ranges::forward_range<V> und std::sized_sentinel_for<ranges::sentinel_t<V>, ranges::iterator_t<V>> modelliert werden.

Datenelemente

Mitglied Beschreibung
V base_ (privat) die zugrundeliegende View
(nur zur Darstellung dienendes Memberobjekt*)

copyable-box<Pred>

(bis C++23)

movable-box<Pred>

(seit C++23)
pred_ (privat)
das zugrundeliegende Funktionsobjekt
(nur zur Darstellung dienendes Memberobjekt*)
non-propagating-cache<ranges::iterator_t<V>> cache_ (privat)
(nur vorhanden, wenn V forward_range erfüllt)
ein Objekt, das das Ergebnis von begin()
zwischenspeichert (nur zur Darstellung dienendes Memberobjekt*)

Memberfunktionen

konstruiert einen drop_while_view
(öffentliche Elementfunktion)
gibt eine Kopie der zugrundeliegenden (adaptierten) Ansicht zurück
(öffentliche Elementfunktion)
gibt eine Referenz auf das gespeicherte Prädikat zurück
(öffentliche Elementfunktion)
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion)
gibt einen Iterator oder Sentinel zum Ende zurück
(öffentliche Elementfunktion)
Geerbt von ranges::view_interface
gibt zurück, ob die abgeleitete Ansicht leer ist, nur verfügbar, wenn sie sized_range oder forward_range
erfüllt (öffentliche Mitgliedsfunktion von std::ranges::view_interface<D>)
(C++23)
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(öffentliche Mitgliedsfunktion von std::ranges::view_interface<D>)
(C++23)
gibt einen Sentinel für den konstanten Iterator des Bereichs zurück
(öffentliche Mitgliedsfunktion von std::ranges::view_interface<D>)
gibt zurück, ob die abgeleitete Ansicht nicht leer ist, nur verfügbar, wenn ranges::empty darauf anwendbar ist
(öffentliche Mitgliedsfunktion von std::ranges::view_interface<D>)
erhält die Adresse der Daten der abgeleiteten Ansicht, nur verfügbar, wenn ihr Iteratortyp contiguous_iterator
erfüllt (öffentliche Mitgliedsfunktion von std::ranges::view_interface<D>)
gibt die Anzahl der Elemente in der abgeleiteten Ansicht zurück. Verfügbar, wenn es forward_range erfüllt und sein Sentinel- und Iteratortyp sized_sentinel_for erfüllen.
(öffentliche Mitgliedsfunktion von std::ranges::view_interface<D>)
gibt das erste Element in der abgeleiteten Ansicht zurück, verfügbar, wenn es forward_range
erfüllt (öffentliche Mitgliedsfunktion von std::ranges::view_interface<D>)
gibt das letzte Element in der abgeleiteten Ansicht zurück, nur verfügbar, wenn es bidirectional_range und common_range
erfüllt (öffentliche Mitgliedsfunktion von std::ranges::view_interface<D>)
gibt das n-te Element in der abgeleiteten Ansicht zurück, nur verfügbar, wenn es random_access_range
erfüllt (öffentliche Mitgliedsfunktion von std::ranges::view_interface<D>)

Ableitungsleitfäden

Hilfsvorlagen

template < class T, class Pred >

constexpr bool enable_borrowed_range < std :: ranges :: drop_while_view < T, Pred >> =

ranges:: enable_borrowed_range < T > ;
(seit C++20)

Diese Spezialisierung von std :: ranges:: enable_borrowed_range bewirkt, dass drop_while_view borrowed_range erfüllt, wenn die zugrundeliegende View diese Bedingung erfüllt.

Hinweise

Um die amortisierte konstante Zeitkomplexität zu gewährleisten, die vom range -Konzept gefordert wird, wird das Ergebnis von begin innerhalb des drop_while_view -Objekts zwischengespeichert. Wenn der zugrundeliegende Bereich nach dem ersten Aufruf von begin() modifiziert wird, können nachfolgende Verwendungen des drop_while_view -Objekts unintuitives Verhalten aufweisen.

Beispiel

#include <iostream>
#include <ranges>
#include <string>
#include <string_view>
using std::operator""sv;
[[nodiscard]]
constexpr bool is_space(char p) noexcept
{
    auto ne = [p](auto q) { return p != q; };
    return !!(" \t\n\v\r\f" | std::views::drop_while(ne));
};
[[nodiscard("trims the output")]]
constexpr std::string_view trim_left(std::string_view const in) noexcept
{
    auto view = in | std::views::drop_while(is_space);
    return {view.begin(), view.end()};
}
[[nodiscard("trims the output")]]
constexpr std::string trim(std::string_view const in)
{
    auto view = in
              | std::views::drop_while(is_space)
              | std::views::reverse
              | std::views::drop_while(is_space)
              | std::views::reverse
              ;
    return {view.begin(), view.end()};
}
int main()
{
    static_assert(trim_left(" \n C++23") == "C++23"sv);
    constexpr auto src{" \f\n\t\r\vHello, C++20!\f\n\t\r\v "sv};
    static_assert(trim(src) == "Hello, C++20!");
    static constexpr auto v = {0, 1, 2, 3, 4, 5};
    for (int n : v | std::views::drop_while([](int i) { return i < 3; }))
        std::cout << n << ' ';
    std::cout << '\n';
}

Ausgabe:

3 4 5

Fehlerberichte

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

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 3494 C++20 drop_while_view war nie ein borrowed_range es ist ein borrowed_range wenn seine zugrunde liegende Ansicht es ist

Siehe auch

eine view , bestehend aus Elementen einer anderen view , die die ersten N Elemente überspringt
(Klassentemplate) (Range-Adapter-Objekt)