Namespaces
Variants
Actions

std::iota

From cppreference.com
< cpp‎ | algorithm
 
 
Algorithm library
Constrained algorithms and algorithms on ranges(C++20)
Constrained algorithms, e.g. ranges::copy, ranges::sort, ...
Execution policies (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
(C++11)
(C++17)
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
 
 
Defined in header <numeric>
template<class ForwardIt, class T >
void iota( ForwardIt first, ForwardIt last, T value );
(since C++11)
(constexpr since C++20)

Fills the range [firstlast) with sequentially increasing values, starting with value and repetitively evaluating ++value.

Equivalent operation (assuming ++value returns the incremented value):

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

If any of the following conditions is satisfied, the program is ill-formed:

  • T is not convertible to the value type of ForwardIt.
  • The expression ++val is ill-formed, where val is a variable of type T.

Contents

[edit]Parameters

first, last - the pair of iterators defining the range of elements to fill with sequentially increasing values starting with value
value - initial value to store

[edit]Complexity

Exactly std::distance(first, last) increments and assignments.

[edit]Possible implementation

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

[edit]Notes

The function is named after the integer function from the programming language APL. It was one of the STL components that were not included in C++98, but made it into the standard library in C++11.

[edit]Example

The following example applies std::shuffle to a vector of std::lists' iterators. std::iota is used to populate containers.

#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(constauto& n : l)std::cout<<std::setw(2)<< n <<' ';std::cout<<'\n';   std::cout<<"Contents of l, viewed via shuffled v:\t";for(constauto i : v)std::cout<<std::setw(2)<<*i <<' ';std::cout<<'\n';}

Possible output:

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

[edit]See also

fills a range with successive increments of the starting value
(algorithm function object)[edit]
copy-assigns the given value to every element in a range
(function template)[edit]
assigns a range of elements a certain value
(algorithm function object)[edit]
assigns the results of successive function calls to every element in a range
(function template)[edit]
saves the result of a function in a range
(algorithm function object)[edit]
a view consisting of a sequence generated by repeatedly incrementing an initial value
(class template)(customization point object)[edit]
a view that maps each element of adapted sequence to a tuple of both the element's position and its value
(class template)(range adaptor object)[edit]
close