Condividi tramite


view_interface classe (libreria standard C++)

Classe di base per le classi di visualizzazione nello spazio dei std::ranges nomi . Questa classe implementa alcune delle interfacce per i tipi di visualizzazione derivati. Usare questa opzione come classe di base per i tipi di visualizzazione personalizzati per ridurre il boilerplate che è necessario scrivere.

Sintassi

template<class Derived>
  requires std::is_class_v<Derived> && 
  std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;

Parametri del modello

Derived
Tipo della classe che deriva da questa classe di base.

Membri

Funzioni membro Descrizione
backC++20 Ottiene l'ultimo elemento nella vista derivata.
dataC++20 Ottenere un puntatore al primo elemento nella vista derivata.
emptyC++20 Verificare se la vista derivata è vuota.
frontC++20 Ottiene il primo elemento nella vista derivata.
sizeC++20 Ottiene il numero di elementi nella vista derivata.
Operatori Descrizione
operator[]C++20 Ottiene l'elemento nella posizione specificata.
operator boolC++20 Verificare se la vista derivata non è vuota.

Requisiti

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

Spazio dei nomi: std::ranges

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

back

Ottiene l'ultimo elemento nella vista derivata.

constexpr auto back()
    requires ranges::bidirectional_range<Derived> &&
    ranges::common_range<Derived>;

constexpr auto back() const
    requires ranges::bidirectional_range<const Derived> && 
    ranges::common_range<const Derived>;

Parametri

Nessuna.

Valore restituito

Ultimo elemento nella vista derivata.

Osservazioni:

La vista derivata deve soddisfare bidirectional_range e common_range.
Il comportamento di back() e front() non è definito per qualsiasi visualizzazione vuota.

data

Ottenere un puntatore al primo elemento nella vista derivata.

constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<Derived>>;
constexpr auto data() const
    requires ranges::range<const Derived> &&
    std::contiguous_iterator<ranges::iterator_t<const Derived>>;

Parametri

Nessuna.

Valore restituito

Puntatore al primo elemento nella vista derivata.

Osservazioni:

L'iteratore per la vista derivata deve soddisfare contiguous_iterator.

empty

Verificare se la vista derivata è vuota.

1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;

Parametri

Nessuna.

Valore restituito

Restituisce true se la vista derivata non contiene elementi. In caso contrario, restituisce false.

Osservazioni:

La vista derivata deve soddisfare std::ranges::forward_range.

front

Ottiene il primo elemento nella vista derivata.

constexpr auto front()
    requires ranges::forward_range<Derived>;
constexpr auto front() const
    requires ranges::forward_range<const Derived>;

Parametri

Nessuna.

Valore restituito

Ultimo elemento nella vista derivata.

Osservazioni:

La vista derivata deve soddisfare forward_range.
Il comportamento di front() è indefinito per std::ranges::empty_view.

size

Ottiene il numero di elementi nella vista derivata.

constexpr auto size() requires ranges::forward_range<Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<Derived>,
    ranges::iterator_t<Derived>>;
constexpr auto size() const requires ranges::forward_range<const Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<const Derived>,
    ranges::iterator_t<const Derived>>;

Parametri

Nessuna.

Valore restituito

Numero di elementi nella vista derivata.

Osservazioni:

L'iteratore per la vista derivata deve soddisfare sized_sentinel_for.

operator[]

Ottiene l'elemento nella posizione specificata.

template<ranges::random_access_range R = Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);

template<ranges::random_access_range R = const Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;

Parametri

pos
Posizione, relativa all'iteratore iniziale, dell'elemento da restituire.

Valore restituito

Elemento in corrispondenza della posizione specificata rispetto all'iteratore iniziale.

Osservazioni:

La vista derivata deve soddisfare random_access_range.
Il comportamento di questo operatore non è definito per std::ranges::empty_view.

Esempio: operator[]

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

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::drop_view dv = std::views::drop(v, 2);

    for (auto e : dv)
    {
        std::cout << e << ' '; // 3 4 5
    }

    std::cout << "\ndv[1] = " << dv[1];
}
3 4 5
dv[1] = 4

view_interface::operator bool

Verificare se la vista derivata non è vuota.

explicit constexpr operator bool();
explicit constexpr operator bool() const;

Parametri

Nessuna.

Valore restituito

Restituisce false se la vista derivata non contiene elementi (la visualizzazione è vuota). In caso contrario, restituisce true (la visualizzazione non è vuota).

Osservazioni:

L'iteratore per la vista derivata deve soddisfare std::ranges::forward_iterator.
Questo operatore equivale a !empty(). In questo modo è utile scrivere if (someRange) {...} per verificare se è presente qualcosa nell'intervallo su cui operare.
Il comportamento di questo operatore non è definito per std::ranges::empty_view.

Esempio: operator bool

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

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::filter_view fv = std::views::filter(v, [](int e) { return e > 3; });

    bool isNotEmpty = static_cast<bool>(fv);
    std::cout << "Has elements greater than 3: " << std::boolalpha << isNotEmpty << '\n' >>;
}
Has elements greater than 3: true

Vedi anche

<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
Visualizzare le classi