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 |
---|---|
back C++20 |
Ottiene l'ultimo elemento nella vista derivata. |
data C++20 |
Ottenere un puntatore al primo elemento nella vista derivata. |
empty C++20 |
Verificare se la vista derivata è vuota. |
front C++20 |
Ottiene il primo elemento nella vista derivata. |
size C++20 |
Ottiene il numero di elementi nella vista derivata. |
Operatori | Descrizione |
operator[] C++20 |
Ottiene l'elemento nella posizione specificata. |
operator bool C++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