elements_view
classe (bibliothèque standard C++)
Vue sur les éléments à un index sélectionné dans chaque valeur de type tuple dans une plage. Par exemple, en fonction d’une plage de std::tuple<string, int>
, créez une vue composée des string
éléments de chaque tuple.
Syntaxe
template<input_range V, size_t N>
class elements_view : public view_interface<elements_view<V, N>>;
Paramètres de modèle
N
Index de l’élément à sélectionner pour la vue.
V
Type de la plage sous-jacente. Ce type doit satisfaire ranges::input_range
.
Afficher les caractéristiques
Pour obtenir une description des entrées suivantes, consultez les caractéristiques de classe View
Caractéristique | Description |
---|---|
Adaptateur de plage | views::elements |
Plage sous-jacente | Doit satisfaire input_range ou supérieur |
Type d’élément | Identique au type de l’élément tuple indexé |
Afficher la catégorie d’itérateur | forward_range , bidirectional_range ou random_access_range |
Taille | Uniquement si la plage sous-jacente satisfait sized_range |
Est const -itérable |
Uniquement si la plage sous-jacente satisfait const-iterable |
Plage commune | Uniquement si la plage sous-jacente satisfait common_range |
Plage empruntée | Uniquement si la plage sous-jacente satisfait borrowed_range |
Membres
Fonctions membres | Description |
---|---|
Constructeurs C++20 | Construisez un elements_view . |
base C++20 |
Obtenez la plage sous-jacente. |
begin C++20 |
Obtenez un itérateur au premier élément. |
end C++20 |
Obtenez la sentinelle à la fin de la vue. |
size C++20 |
Obtenez le nombre d’éléments de cette vue. La plage sous-jacente doit satisfaire sized_range . |
Hérité de view_interface |
Description |
back C++20 |
Obtenez le dernier élément. |
empty C++20 |
Testez si la valeur elements_view est vide. |
front C++20 |
Obtenez le premier élément. |
operator[] C++20 |
Obtenez l’élément à la position spécifiée. |
operator bool C++20 |
Testez si la valeur elements_view 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.
Notes
Les types de tuples que vous pouvez utiliser sont elements_view
std::tuple
, std::pair
et std::array
.
Constructeurs
Construire une instance d’un elements_view
.
1) constexpr elements_view(V base);
2) elements_view() requires std::default_initializable<V> = default;
Paramètres
base
Plage sous-jacente.
Pour plus d’informations sur le type de paramètre de modèle, consultez Paramètres de modèle.
Valeur retournée
Instance de elements_view
.
Notes
La meilleure façon de créer un elements_view
est d’utiliser l’adaptateur elements
de plage. Les adaptateurs de plage sont la méthode prévue pour créer des classes d’affichage. Les types d’affichage sont exposés au cas où vous souhaitez créer votre propre type d’affichage personnalisé.
1) Créez un elements_view
élément à partir de la vue spécifiée.
2) Construction par défaut d’un elements_view
.
Exemple : elements_view
// requires /std:c++20 or later
#include <array>
#include <iostream>
#include <map>
#include <ranges>
#include <vector>
#include <string>
#include <utility>
int main()
{
// ========== work with a std::map
std::map<std::string, int> cpp_standards
{
{"C++98", 1988},
{"C++03", 2003},
{"C++11", 2011},
{"C++14", 2014},
{"C++17", 2017},
{"C++20", 2020}
};
// create an elements_view of all the string elements (<1>) from each tuple
for (int const year : std::views::elements<1>(cpp_standards))
{
std::cout << year << ' '; // 2003 2011 2014 2017 1988 2020
}
std::cout << '\n';
// Another way to call the range adaptor using pipe (|) syntax
for (auto&& name : cpp_standards | std::views::elements<0>)
{
std::cout << name << ' '; // C++03 C++11 C++14 C++17 C++98 C++20
}
std::cout << '\n';
// ========== working with arrays
std::array<std::array<int, 4>, 3> arr = { {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}} };
for (int& fourth : arr | std::views::elements<3>)
{
std::cout << fourth << ' '; // 3 7 11
}
std::cout << '\n';
// ========== work with a std::pair
std::vector<std::pair<std::string, int>> windows
{
{"Windows 1.0", 1985},
{"Windows 2.0", 1987},
{"Windows 3.0", 1990},
{"Windows 3.1", 1992},
{"Windows NT 3.1", 1993},
{"Windows 95", 1995},
{"Windows NT 4.0", 1996},
{"Windows 98", 1998},
{"Windows 2000", 2000}
};
for (int year : std::views::elements<1>(windows))
{
std::cout << year << ' '; // 1985 1987 1990 1992 1993 1995 1996 1998 2000
}
}
2003 2011 2014 2017 1988 2020
C++03 C++11 C++14 C++17 C++98 c++20
3 7 11
1985 1987 1990 1992 1993 1995 1996 1998 2000
base
Obtient une copie de la plage sous-jacente.
// Uses a copy constructor to return the underlying range
constexpr V base() const& requires std::copy_constructible<V>;
// Uses a move constructor to return the underlying range
constexpr V base() &&;
Paramètres
Aucune.
Valeur retournée
Plage sous-jacente.
begin
Obtenez un itérateur au premier élément du elements_view
.
1) constexpr auto begin() requires (!Simple_view<V>);
2) constexpr auto begin() const requires range<const V>;
Paramètres
Aucune.
Valeur retournée
Itérateur pointant vers le premier élément du elements_view
.
end
Obtenir la sentinelle à la fin de la elements_view
1) constexpr auto end() requires (!Simple_view<V> && !ranges::common_range<V>);
2) constexpr auto end() requires (!Simple_view<V> && ranges::common_range<V>);
3) constexpr auto end() const requires ranges::range<const V>;
4) constexpr auto end() const requires ranges::common_range<const V>;
Paramètres
Aucune.
Valeur retournée
Sentinel qui suit le dernier élément dans le elements_view
:
size
Obtenez le nombre d’éléments dans la vue.
constexpr auto size() requires sized_range<V>;
constexpr auto size() const requires sized_range<const V>;
Paramètres
Aucune.
Valeur retournée
Nombre d'éléments dans elements_view
.
Notes
La taille de la vue est disponible uniquement si la plage sous-jacente est limitée sized_range
, ou en d’autres termes.