Partager via


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
backC++20 Obtenez le dernier élément de la vue dérivée.
dataC++20 Obtenez un pointeur vers le premier élément de la vue dérivée.
emptyC++20 Testez si la vue dérivée est vide.
frontC++20 Obtenez le premier élément de la vue dérivée.
sizeC++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 boolC++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