Namespaces
Variants

std::iota

Depuis fr.cppreference.net
 
 
Bibliothèque d'algorithmes
Algorithmes contraints et algorithmes sur les plages (C++20)
Algorithmes contraints, par ex. ranges::copy, ranges::sort, ...
Opérations de séquence non modifiantes    
Opérations par lots
(C++17)
Opérations de recherche
Opérations de séquence modificatrices
Opérations de copie
(C++11)
(C++11)
Opérations d'échange
Opérations de transformation
Opérations de génération
Opérations de suppression
Opérations de changement d'ordre
(jusqu'à C++17)(C++11)
(C++20)(C++20)
Opérations d'échantillonnage
(C++17)

Opérations de tri et connexes
Opérations de partitionnement
(C++11)    

Opérations de tri
Opérations de recherche binaire
(sur des plages partitionnées)
Opérations d'ensemble (sur des plages triées)
Opérations de fusion (sur des plages triées)
Opérations de tas
Opérations de minimum/maximum
(C++11)
(C++17)
Opérations de comparaison lexicographique
Opérations de permutation


 
 
Défini dans l'en-tête <numeric>
template< class ForwardIt, class T >
void iota( ForwardIt first, ForwardIt last, T value );
(depuis C++11)
(constexpr depuis C++20)

Remplit la plage [firstlast) avec des valeurs croissantes de manière séquentielle, en commençant par value et en évaluant de manière répétée ++value.

Opération équivalente (en supposant que ++value renvoie la valeur incrémentée) :

*first   = value;
*++first = ++value;
*++first = ++value;
*++first = ++value;
// repeats until “last” is reached

Si l'une des conditions suivantes est satisfaite, le programme est mal formé :

  • T n'est pas convertible en le type de valeur de ForwardIt.
  • L'expression ++val est mal formée, où val est une variable de type T.

Paramètres

first, last - la paire d'itérateurs définissant la plage d'éléments à remplir avec des valeurs croissantes de manière séquentielle en commençant par la value
valeur - valeur initiale à stocker

Complexité

Exactement std::distance(first, last) incrémentations et affectations.

Implémentation possible

template<class ForwardIt, class T>
constexpr // since C++20
void iota(ForwardIt first, ForwardIt last, T value)
{
    for (; first != last; ++first, ++value)
        *first = value;
}

Notes

La fonction est nommée d'après la fonction entière du langage de programmation APL. Elle était l'un des composants STL qui n'étaient pas inclus dans C++98, mais a été intégrée dans la bibliothèque standard en C++11.

Exemple

L'exemple suivant applique std::shuffle à un std::vector d'itérateurs de std::list. std::iota est utilisé pour remplir les conteneurs.

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <list>
#include <numeric>
#include <random>
#include <vector>

class BigData // inefficient to copy
{
    int data[1024]; /* some raw data */
public:
    explicit BigData(int i = 0) { data[0] = i; /* ... */ }
    operator int() const { return data[0]; }
    BigData& operator=(int i) { data[0] = i; return *this; }
    /* ... */
};

int main()
{
    std::list<BigData> l(10);
    std::iota(l.begin(), l.end(), -4);
    
    std::vector<std::list<BigData>::iterator> v(l.size());
    std::iota(v.begin(), v.end(), l.begin());
    // Vector of iterators (to original data) is used to avoid expensive copying,
    // and because std::shuffle (below) cannot be applied to a std::list directly.
    
    std::shuffle(v.begin(), v.end(), std::mt19937{std::random_device{}()});
    
    std::cout << "Original contents of the list l:\t";
    for (const auto& n : l)
        std::cout << std::setw(2) << n << ' ';
    std::cout << '\n';
    
    std::cout << "Contents of l, viewed via shuffled v:\t";
    for (const auto i : v)
        std::cout << std::setw(2) << *i << ' ';
    std::cout << '\n';
}

Sortie possible :

Original contents of the list l:	-4 -3 -2 -1  0  1  2  3  4  5
Contents of l, viewed via shuffled v:	-1  5 -4  0  2  1  4 -2  3 -3

Voir aussi

remplit une plage avec des incréments successifs de la valeur de départ
(objet fonction d'algorithme)
affecte par copie la valeur donnée à chaque élément d'une plage
(fonction modèle & objet fonction d'algorithme)
assigne une certaine valeur à une plage d'éléments
(objet fonction d'algorithme)
assigne les résultats d'appels de fonction successifs à chaque élément d'une plage
(fonction modèle & objet fonction d'algorithme)
enregistre le résultat d'une fonction dans une plage
(objet fonction d'algorithme)
une vue constituée d'une séquence générée en incrémentant répétitivement une valeur initiale
(modèle de classe) (objet point de personnalisation)
une vue qui génère une séquence de valeurs croissantes de 0 jusqu'à n
(objet point de personnalisation)
une vue qui mappe chaque élément de la séquence adaptée à un tuple comprenant à la fois la position de l'élément et sa valeur
(modèle de classe) (objet adaptateur de plage)