view_interface
classe (bibliothèque standard C++)
Classe de base pour les classes d’affichage dans l’espace std::ranges
de noms. Cette classe implémente une partie de l’interface pour les types d’affichage dérivés. Utilisez-la comme classe de base pour vos propres types d’affichage pour réduire la réutilisable que vous devez écrire.
Syntaxe
template<class Derived>
requires std::is_class_v<Derived> &&
std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;
Paramètres de modèle
Derived
Type de la classe qui dérive de cette classe de base.
Membres
Fonctions membres | Description |
---|---|
back C++20 |
Obtenez le dernier élément de la vue dérivée. |
data C++20 |
Obtenez un pointeur vers le premier élément de la vue dérivée. |
empty C++20 |
Testez si la vue dérivée est vide. |
front C++20 |
Obtenez le premier élément de la vue dérivée. |
size C++20 |
Obtenez le nombre d’éléments dans la vue dérivée. |
Opérateurs | Description |
operator[] C++20 |
Obtenez l’élément à la position spécifiée. |
operator bool C++20 |
Testez si la vue dérivée n’est pas vide. |
Spécifications
En-tête : <ranges>
(depuis C++20)
Espace de noms : std::ranges
Option du compilateur : /std:c++20
ou version ultérieure est requise.
back
Obtenez le dernier élément de la vue dérivée.
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>;
Paramètres
Aucune.
Valeur retournée
Dernier élément de la vue dérivée.
Notes
La vue dérivée doit satisfaire bidirectional_range
et common_range
.
Comportement des back()
affichages vides et front()
non définis.
data
Obtenez un pointeur vers le premier élément de la vue dérivée.
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>>;
Paramètres
Aucune.
Valeur retournée
Pointeur vers le premier élément de la vue dérivée.
Notes
L’itérateur de la vue dérivée doit satisfaire contiguous_iterator
.
empty
Testez si la vue dérivée est vide.
1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;
Paramètres
Aucune.
Valeur retournée
Retourne true
si la vue dérivée n’a aucun élément. Sinon, retourne false
.
Notes
La vue dérivée doit satisfaire std::ranges::forward_range
.
front
Obtenez le premier élément de la vue dérivée.
constexpr auto front()
requires ranges::forward_range<Derived>;
constexpr auto front() const
requires ranges::forward_range<const Derived>;
Paramètres
Aucune.
Valeur retournée
Dernier élément de la vue dérivée.
Notes
La vue dérivée doit satisfaire forward_range
.
Le comportement de n’est front()
pas défini pour std::ranges::empty_view
.
size
Obtenez le nombre d’éléments dans la vue dérivée.
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>>;
Paramètres
Aucune.
Valeur retournée
Nombre d’éléments dans la vue dérivée.
Notes
L’itérateur de la vue dérivée doit satisfaire sized_sentinel_for
.
operator[]
Obtenez l’élément à la position spécifiée.
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;
Paramètres
pos
Position, par rapport à l’itérateur de début, de l’élément à retourner.
Valeur retournée
Élément à la position spécifiée par rapport à l’itérateur de début.
Notes
La vue dérivée doit satisfaire random_access_range
.
Le comportement de cet opérateur n’est pas défini pour std::ranges::empty_view
.
Exemple : 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
Testez si la vue dérivée n’est pas vide.
explicit constexpr operator bool();
explicit constexpr operator bool() const;
Paramètres
Aucune.
Valeur retournée
Retourne false
si la vue dérivée n’a aucun élément (la vue est vide). Sinon, retourne true
(la vue n’est pas vide).
Notes
L’itérateur de la vue dérivée doit satisfaire std::ranges::forward_iterator
.
Cet opérateur équivaut à !empty()
. Cela permet d’écrire if (someRange) {...}
pour tester s’il y a quelque chose dans la plage à utiliser.
Le comportement de cet opérateur n’est pas défini pour std::ranges::empty_view
.
Exemple : 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
Voir aussi
<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
Afficher les classes