iota_view
classe (bibliothèque standard C++)
Génère une vue d’une séquence d’éléments en incrémentant à plusieurs reprises une valeur initiale. La séquence peut être limitée ou non liée.
Syntaxe
template<std::weakly_incrementable W, std::semiregular Bound = std::unreachable_sentinel_t>
requires __WeaklyEqualityComparableWith<W, Bound> && std::copyable<W>
class iota_view : public ranges::view_interface<iota_view<W, Bound>>;
Paramètres de modèle
W
Type des valeurs dans la séquence. Le type spécifié doit prendre en charge operator++
.
Bound
Type de la valeur de fin. S’il Bound
s’agit std::unreachable_sentinel_t
(valeur par défaut), l’affichage n’est pas lié.
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::iota |
Plage sous-jacente | Non applicable, car cette vue génère ses membres |
Type d’élément | Identique au paramètre de modèle W |
Afficher la catégorie d’itérateur | Prend en charge input_range jusqu’à random_access_range , selon le type de W |
Taille | Seulement si la plage a une valeur de fin, c’est-à-dire qu’elle n’est pas une série infinie |
Est const -itérable |
Oui |
Plage commune | Uniquement s’il Bound s’agit du même type que W |
Plage empruntée | Oui |
Membres
Fonctions membres | Description |
---|---|
Constructeurs C++20 | Construisez la vue. |
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. |
Hérité de view_interface |
Description |
back C++20 |
Obtenez le dernier élément. |
empty C++20 |
Testez si la vue 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 vue n’est pas vide. |
Notes
Une bonne façon de créer un iota_view
est d’utiliser l’adaptateur iota
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é.
La séquence de valeurs peut être des valeurs intégrales telles que 1,2,3 ou 'a', 'b', 'c' ou des éléments consécutifs à partir d’une plage.
Cette vue est généralement utilisée pour itérer sur une série de valeurs. Par exemple :
for (int i : iota_view{1, 10}) // iterate over a view of the integers 1 through 9
{
std::cout << i << ’ ’; // 1 2 3 4 5 6 7 8 9
}
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.
Constructeurs
Créez une instance d’un iota_view
.
1) iota_view() requires std::default_initializable<W> = default;
2) constexpr explicit iota_view(W value);
3) constexpr iota_view(std::type_identity_t<W> value, std::type_identity_t<Bound> bound);
4) constexpr iota_view( /*iterator*/ first, /*sentinel*/ last );
Paramètres
value
Valeur de départ de la série.
bound
Limite de la série. Il s’agit d’une valeur supérieure à la dernière valeur de la série.
Pour plus d’informations sur le type de paramètre de modèle, consultez Paramètres de modèle.
Notes
1) Créez une iota_view
valeur de début et de fin déterminée par le type de modèle W
initialisé par défaut.
2) Créez une iota_view
valeur de départ et une valeur de fin spécifiées déterminées par le type W
initialisé par valeur.
3) Créez une limite iota_view
avec la valeur de départ et la valeur de fin spécifiées. La valeur de fin est une valeur inférieure à la dernière valeur spécifiée.
4) Utilisé pour créer des sous-vues. Par exemple, std::ranges::iota_view(start, end);
où start
et end
sont des itérateurs au début et à la fin de la sous-vue.
Au lieu de créer cette classe directement, un moyen simple de créer un iota_view
consiste à utiliser l’adaptateur iota
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é.
Si le type de la limite est unreachable_sentinel_t
, la vue résultante est limitée.
Lorsque vous utilisez l’un des constructeurs qui initialisent la valeur dans la limite, la limite est la valeur initialisée par défaut pour ce type. Par exemple, iota_view<int, int>{}
il s’agit d’une plage int
vide, car la valeur int construite par défaut et la limite sont toutes les deux 0
. En outre, iota_view<int, int>{-4}
c’est -4, -3, -2, -1
parce que la limite construite par int
défaut est 0
.
iota_view
exemple de constructeur
// requires /std:c++20, or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::ranges::iota_view<int> iv; // create an iota_view with an unbounded range, starting at 0
std::ranges::iota_view<int> iv2(5); // create an iota_view with an unbounded range, starting at 5.
std::ranges::iota_view<int, int> iv3{5, 10}; // create an iota_view with a bounded range, starting at 5 and ending at 9
std::vector<int> v{10, 20, 35, 45, 50, 66, 77, 82, 90, 100};
auto start = std::ranges::find(v, 35);
auto end = std::ranges::find(v, 82);
for (auto &&val : std::ranges::iota_view(start, end))
{
std::cout << *val << ' '; // outputs 35 45 50 66 77
}
}
begin
Obtenez un itérateur sur le premier élément de la vue.
constexpr auto begin();
constexpr auto begin() const requires range<const V>;
Paramètres
Aucune.
Valeur retournée
Itérateur pointant vers le premier élément de la vue.
end
Obtenez la sentinelle de fin à la fin de la vue.
constexpr auto end();
constexpr auto end() const requires ranges::range<const V>;
Paramètres
Aucune.
Valeur retournée
Si l’objet iota_view
est non lié, retourne std::unreachable_sentinel
.
Si la iota_view
valeur est limitée, retourne un itérateur pointant vers la sentinelle après la dernière valeur de la séquence.
size
Obtenez le nombre d’éléments dans la vue. Doit iota_view
être limité.
constexpr auto size() requires
(same_as<W, Bound> && advanceable <W>) ||
(integral<W> && integral<Bound>) ||
sized_sentinel_for<Bound, W>;
Paramètres
Aucune.
Valeur retournée
Nombre d'éléments dans iota_view
.
Notes
Vous ne pouvez pas appeler size()
un objet non lié iota_view
.
Voir aussi
<ranges>
iota()
adaptateur de plage
std::numerics::iota
afficher les classes