Namespaces
Variants

std:: iota

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
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 [ first , last ) avec des valeurs séquentiellement croissantes, en commençant par value et en évaluant de manière répétée ++ value .

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

*first   = value;
*++first = ++value;
*++first = ++value;
*++first = ++value;
// se répète jusqu'à ce que « last » soit atteint

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

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

Table des matières

Paramètres

first, last - la paire d'itérateurs définissant l'intervalle des éléments à remplir avec des valeurs séquentiellement croissantes commençant par value
value - valeur initiale à stocker

Complexité

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

Implémentation possible

template<class ForwardIt, class T>
constexpr // depuis 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 . C'était l'un des composants STL qui n'étaient pas inclus dans C++98, mais qui ont été intégrés dans la bibliothèque standard en C++11.

Exemple

L'exemple suivant applique std::shuffle à un 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)
assigne par copie la valeur donnée à chaque élément d'une plage
(modèle de fonction)
assigne une certaine valeur à une plage d'éléments
(objet fonction d'algorithme)
assigne les résultats d'appels successifs de fonction à chaque élément d'une plage
(modèle de fonction)
sauvegarde le résultat d'une fonction dans une plage
(objet fonction d'algorithme)
une view 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 view qui mappe chaque élément de la séquence adaptée vers un tuple contenant à la fois la position de l'élément et sa valeur
(modèle de classe) (objet adaptateur de plage)