Namespaces
Variants

std::ranges::views::take_while, std::ranges::take_while_view

Von de.cppreference.net
 
 
Ranges-Bibliothek
Range-Adaptoren
 
 
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 take_while_view
    : public ranges::view_interface<take_while_view<V, Pred>>
(1) (seit C++20)
namespace views {
    inline constexpr /*unspecified*/ take_while = /*unspecified*/;
}
(2) (seit C++20)
Aufrufsignatur
template< ranges::viewable_range R, class Pred >
    requires /* see below */
constexpr ranges::view auto take_while( R&& r, Pred&& pred );
(seit C++20)
template< class Pred >
constexpr /*range adaptor closure*/ take_while( Pred&& pred );
(seit C++20)
1) Ein Range-Adaptor, der eine view der Elemente einer zugrunde liegenden Sequenz darstellt, beginnend am Anfang und endend mit dem ersten Element, für das das Prädikat false zurückgibt.
2) RangeAdaptorObject. Der Ausdruck views::take_while(e, f) ist ausdrucksäquivalent zu take_while_view(e, f) für alle geeigneten Unterausdrücke e und f.

take_while_view modelliert die Konzepte contiguous_range, random_access_range, bidirectional_range, forward_range und input_range, wenn die zugrunde liegende view V die entsprechenden Konzepte modelliert.

Datenelemente

Element Beschreibung
V base_ (privat) die zugrundeliegende Ansicht
(nur zur Veranschaulichung dargestelltes Mitgliedsobjekt*)

copyable-box<Pred>

(bis C++23)

movable-box<Pred>

(seit C++23)
pred_ (privat)
das zugrundeliegende Funktionsobjekt
(nur zur Veranschaulichung dargestelltes Mitgliedsobjekt*)

Memberfunktionen

konstruiert einen take_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 Sentinel zurück, der das Ende repräsentiert
(öffentliche Elementfunktion)
Geerbt von ranges::view_interface
gibt zurück, ob die abgeleitete View leer ist, nur bereitgestellt, wenn sie sized_range oder forward_range
erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
(C++23)
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(öffentliche Elementfunktion von std::ranges::view_interface<D>)
(C++23)
gibt einen Sentinel für den konstanten Iterator des Bereichs zurück
(öffentliche Elementfunktion von std::ranges::view_interface<D>)
gibt zurück, ob die abgeleitete View nicht leer ist, nur bereitgestellt, wenn ranges::empty darauf anwendbar ist
(öffentliche Elementfunktion von std::ranges::view_interface<D>)
holt die Adresse der Daten der abgeleiteten View, nur bereitgestellt, wenn ihr Iteratortyp contiguous_iterator
erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
gibt das erste Element in der abgeleiteten View zurück, bereitgestellt, wenn sie forward_range
erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
gibt das nte Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie random_access_range
erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)

Ableitungsleitfäden

Geschachtelte Klassen

der Sentinel-Typ
( Nur zur Darstellung verwendete Member-Klassenvorlage* )

Hinweise

Für forward_iterator s ist views :: take_while ( v, pred ) ähnlich zu ranges:: subrange { ranges:: begin ( v ) , ranges:: find_if_not ( v, pred ) } , wobei Letzteres pred nur während der Konstruktion aufruft (während Ersteres pred bei jedem Vergleich eines gültigen take_while -Iterators mit einem Sentinel aufruft).

Beispiel

#include <iostream>
#include <ranges>
int main()
{
    for (int year : std::views::iota(2020)
                  | std::views::take_while([](int y){ return y < 2026; }))
        std::cout << year << ' ';
    std::cout << '\n';
    const char note[]{"Today is yesterday's tomorrow!..."};
    auto not_dot = [](char c){ return c != '.'; };
    for (char x : std::ranges::take_while_view(note, not_dot))
        std::cout << x;
    std::cout << '\n';
}

Ausgabe:

2020 2021 2022 2023 2024 2025
Today is yesterday's tomorrow!

Siehe auch

eine view , bestehend aus den ersten N Elementen einer anderen view
(Klassentemplate) (Range-Adapter-Objekt)
eine view , bestehend aus den Elementen einer anderen view , die das anfängliche Teilelement überspringt, bis zum ersten Element, bei dem das Prädikat false zurückgibt
(Klassentemplate) (Range-Adapter-Objekt)