Condividi tramite


take_while_view classe (libreria standard C++)

Visualizzazione che contiene gli elementi iniziali di un intervallo che corrispondono a un predicato.

Sintassi

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>>;

Parametri del modello

Pred
Tipo del predicato che determina gli elementi iniziali da inserire nella visualizzazione.

V
Tipo della vista sottostante.

Visualizzare le caratteristiche

Per una descrizione delle voci seguenti, vedere Visualizzare le caratteristiche della classe

Caratteristica Descrizione
Adattatore di intervallo views::take_while
Intervallo sottostante Deve soddisfare input_range o superiore
Tipo di elemento Uguale all'intervallo sottostante
Visualizzare la categoria iteratore Uguale all'intervallo sottostante
Dimensioni No
Iterabile const Solo se l'intervallo sottostante è const iterabile e il predicato può funzionare con const i riferimenti.
Intervallo comune No
Intervallo preso in prestito No

Membri

Funzioni membro Descrizione
Costruttori C++20 Costruisci la vista.
baseC++20 Ottenere l'intervallo sottostante.
beginC++20 Ottenere un iteratore al primo elemento.
endC++20 Ottenere l'sentinel alla fine della visualizzazione.
predC++20 Ottenere un riferimento al predicato che determina gli elementi da accettare.
Ereditato da view_interface Descrizione
backC++20 Ottiene l'ultimo elemento.
dataC++20 Ottenere un puntatore al primo elemento.
emptyC++20 Verificare se la visualizzazione è vuota.
frontC++20 Ottenere il primo elemento.
operator[]C++20 Ottiene l'elemento nella posizione specificata.
operator boolC++20 Verificare se la visualizzazione non è vuota.
size Ottiene il numero di elementi nella visualizzazione.

Requisiti

Intestazione: <ranges> (da C++20)

Spazio dei nomi: std::ranges

Opzione del compilatore: /std:c++20 o versione successiva è obbligatoria.

Costruttori

Costruire un'istanza di un oggetto take_while_view

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

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

Parametri

base
Visualizzazione sottostante.

pred
Predicato che determina gli elementi iniziali da inserire nella visualizzazione.

Per informazioni sui tipi di parametri del modello, vedere Parametri del modello.

Valore restituito

Oggetto take_while_view.

Osservazioni:

Il modo migliore per creare un take_while_view oggetto consiste nell'usare l'adattatore views::take_while di intervallo. Gli adattatori di intervallo sono il modo previsto per creare classi di visualizzazione. I tipi di visualizzazione vengono esposti nel caso in cui si voglia creare un tipo di visualizzazione personalizzato.

1) Sposta costruisce l'oggetto take_while_view da una base vista e un pred predicato. Entrambi base e pred vengono spostati tramite std::move().
2) Costruisce un oggetto vuoto take_while_view. La visualizzazione sottostante e il predicato sono costruiti per impostazione predefinita.

Esempio: 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

Ottiene una copia della visualizzazione sottostante.

// 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() &&;

Parametri

Nessuna.

Valori restituiti

Copia della visualizzazione sottostante.

begin

Ottiene un iteratore al primo elemento nella visualizzazione.

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>>

Parametri

Nessuna.

Valore restituito

Iteratore che punta al primo elemento della visualizzazione. Il comportamento non è definito se la vista non ha un predicato.

Immagine di un vettore con gli elementi 10, 20 e 30. Il primo elemento contiene 10 ed è etichettato begin(). L'ultimo elemento contiene 30 e viene etichettato come 'ultimo elemento'. Una casella immaginaria dopo l'ultimo elemento indica la sentinella ed è etichettata end().

Osservazioni:

Per 1, il Simple_view requisito indica che una visualizzazione V e const V hanno gli stessi tipi di iteratore e sentinel.

end

Ottenere l'sentinel alla fine della visualizzazione.

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>

Parametri

Nessuna.

Valore restituito

Sentinel che segue l'ultimo elemento nella visualizzazione.

Immagine di un vettore con gli elementi 10, 20 e 30. Il primo elemento contiene 10 ed è etichettato begin(). L'ultimo elemento contiene 30 e viene etichettato come 'ultimo elemento'. Una casella immaginaria dopo l'ultimo elemento indica la sentinella ed è etichettata end().

Osservazioni:

Per 1, il Simple_view requisito indica che una visualizzazione V e const V hanno gli stessi tipi di iteratore e sentinel.

pred

Ottenere un riferimento al predicato usato per selezionare gli elementi iniziali che verranno inseriti nella visualizzazione.

constexpr const Pred& pred() const;

Valore restituito

Riferimento al predicato utilizzato per selezionare gli elementi iniziali da inserire nella vista.

Esempiopred

// 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)
}

Vedi anche

<ranges>
take_view
take_while adattatore di intervallo
classi di visualizzazione