Partager via


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.
beginC++20 Obtenez un itérateur au premier élément.
endC++20 Obtenez la sentinelle à la fin de la vue.
sizeC++20 Obtenez le nombre d’éléments.
Hérité de view_interface Description
backC++20 Obtenez le dernier élément.
emptyC++20 Testez si la vue est vide.
frontC++20 Obtenez le premier élément.
operator[]C++20 Obtenez l’élément à la position spécifiée.
operator boolC++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 Winitialisé 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 Winitialisé 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);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