Freigeben über


take_while_view Klasse (C++-Standardbibliothek)

Eine Ansicht, die die führenden Elemente eines Bereichs enthält, die einem Prädikat entsprechen.

Syntax

template<view V, class Pred> requires
  input_range<V> && is_object_v<Pred> &&
  indirect_unary_predicate<const Pred, iterator_t<V>>
class take_while_view : public view_interface<take_while_view<V, Pred>>;

Vorlagenparameter

Pred
Der Typ des Prädikats, das die führenden Elemente bestimmt, die in der Ansicht platziert werden sollen.

V
Der Typ der zugrunde liegenden Ansicht.

Eigenschaften der Ansicht

Eine Beschreibung der folgenden Einträge finden Sie unter Anzeigen von Klassenmerkmalen

Merkmal Beschreibung
Range Adaptor views::take_while
Zugrunde liegender Bereich Muss erfüllen input_range oder höher
Elementtyp Identisch mit dem zugrunde liegenden Bereich
Iteratorkategorie anzeigen Identisch mit dem zugrunde liegenden Bereich
Größer eingestellt No
Ist const-iterierbar Nur wenn der zugrunde liegende Bereich iterierbar ist const und das Prädikat mit const Verweisen arbeiten kann.
Allgemeiner Bereich No
Geliehener Bereich No

Member

Memberfunktionen Beschreibung
Konstruktoren C++20 Erstellen Sie die Ansicht.
baseC++20 Rufen Sie den zugrunde liegenden Bereich ab.
beginC++20 Rufen Sie einen Iterator zum ersten Element ab.
endC++20 Rufen Sie den Sentinel am Ende der Ansicht ab.
predC++20 Rufen Sie einen Verweis auf das Prädikat ab, das bestimmt, welche Elemente sie einnehmen sollen.
Geerbt von view_interface Beschreibung
backC++20 Rufen Sie das letzte Element ab.
dataC++20 Rufen Sie einen Zeiger auf das erste Element ab.
emptyC++20 Testen Sie, ob die Ansicht leer ist.
frontC++20 Rufen Sie das erste Element ab.
operator[]C++20 Rufen Sie das Element an der angegebenen Position ab.
operator boolC++20 Testen Sie, ob die Ansicht nicht leer ist.
size Ruft die Anzahl der Elemente in der Ansicht ab.

Anforderungen

Header: <ranges> (seit C++20)

Namespace:std::ranges

Compileroption: /std:c++20 oder höher ist erforderlich.

Konstruktoren

Erstellen einer Instanz einer take_while_view

1) take_while_view() requires 
    default_initializable<V> &&
    default_initializable<Pred> = default;

2) constexpr take_while_view(V base, Pred pred);

Parameter

base
Die zugrunde liegende Ansicht.

pred
Das Prädikat, das die führenden Elemente bestimmt, die in der Ansicht platziert werden sollen.

Informationen zu Vorlagenparametertypen finden Sie unter Vorlagenparameter.

Rückgabewert

Ein take_while_view-Objekt.

Hinweise

Die beste Methode zum Erstellen eines Steuerelements take_while_view ist die Verwendung des views::take_while Bereichsadapters. Bereichsadapter sind die beabsichtigte Möglichkeit zum Erstellen von Ansichtsklassen. Die Ansichtstypen werden für den Fall verfügbar gemacht, dass Sie ihren eigenen benutzerdefinierten Ansichtstyp erstellen möchten.

1) Verschieben von Konstrukten take_while_view aus einer base Ansicht und einem pred Prädikat. Beide base und pred werden über std::move()verschoben.
2) Erstellt eine leere take_while_view. Die zugrunde liegende Ansicht und das Prädikat sind standardmäßig konstruiert.

Beispiel: take_while_view

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{0, 1, 2, 3, -4, 5, 6};
    auto twv = std::views::take_while(v, [](int i) {return i >= 0; });
    
    for (auto& e : twv)
    {
        std::cout << e << ' '; // 0 1 2 3
    }
    std::cout << '\n';

    // Using the '|' operator to create a take_view
    for (auto i : v | std::views::take_while([](int i) {return i < 5; }))
    {
        std::cout << i << ' '; // 0 1 2 3 -4
    }
}
0 1 2 3
0 1 2 3 -4

base

Ruft eine Kopie der zugrunde liegenden Ansicht ab.

// Uses a copy constructor to return the underlying view
1) constexpr V base() const& requires std::copy_constructible<V>;

// Uses a move constructor to return the underlying view
2) constexpr V base() &&;

Parameter

Keine.

Gibt zurück

Eine Kopie der zugrunde liegenden Ansicht.

begin

Rufen Sie einen Iterator zum ersten Element in der Ansicht ab.

1) constexpr auto begin() requires (!Simple_view<V>);
2) constexpr auto begin() const requires
        range<const V> && 
        indirect_unary_predicate<const Pred, iterator_t<const V>>

Parameter

Keine

Rückgabewert

Ein Iterator, der auf das erste Element in der Ansicht zeigt. Das Verhalten ist nicht definiert, wenn die Ansicht kein Prädikat aufweist.

Abbildung eines Vektors mit den Elementen 10, 20 und 30. Das erste Element enthält 10 und ist mit

Hinweise

Für 1 bedeutet die Simple_view Anforderung, dass eine Ansicht V und const V dieselben Iterator- und Sentineltypen aufweisen.

end

Rufen Sie den Sentinel am Ende der Ansicht ab.

1) constexpr auto end() requires (!Simple_view<V>);
2) constexpr auto end() const requires
        range<const V> &&
        indirect_unary_predicate<const Pred, iterator_t<const V>

Parameter

Keine

Rückgabewert

Der Sentinel, der auf das letzte Element in der Ansicht folgt.

Abbildung eines Vektors mit den Elementen 10, 20 und 30. Das erste Element enthält 10 und ist mit

Hinweise

Für 1 bedeutet die Simple_view Anforderung, dass eine Ansicht V und const V dieselben Iterator- und Sentineltypen aufweisen.

pred

Rufen Sie einen Verweis auf das Prädikat ab, das zum Auswählen der führenden Elemente in der Ansicht verwendet wird.

constexpr const Pred& pred() const;

Rückgabewert

Ein Verweis auf das Prädikat, das zum Auswählen der führenden Elemente in der Ansicht verwendet wird.

Beispiel: pred

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{ 0, 1, 2, 3, -4, 5, 6 };
    auto mv = v | std::views::take_while(
        [](int i) {return i < 5; });
    std::cout << std::boolalpha << mv.pred()(v[6]); // outputs false because v[6] = 6 and 6 is not less than 5 (the predicate)
}

Siehe auch

<ranges>
take_view
take_while Range Adaptor
Anzeigen von Klassen