std::iota
From cppreference.com
| Defined in header <numeric>
|
||
template< class ForwardIterator, class T >
void iota( ForwardIterator first, ForwardIterator last, T value );
|
(since C++11) | |
Fills the range [first, last) with sequentially increasing values, starting with value and repetitively evaluating ++value.
Equivalent operation:
*(d_first) = value;
*(d_first+1) = ++value;
*(d_first+2) = ++value;
*(d_first+3) = ++value;
...
Parameters
| first, last | - | the range of elements to fill with sequentially increasing values starting with value |
| value | - | initial value to store, the expression ++value must be well-formed |
Return value
(none)
Complexity
Exactly last - first increments and assignments.
Possible implementation
template<class ForwardIterator, class T>
void iota(ForwardIterator first, ForwardIterator last, T value)
{
while(first != last) {
*first++ = value;
++value;
}
}
|
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 eventually made it into the standard library in C++11.
Example
The following example applies std::reverse to a vector of iterators to a std::list. std::iota is used to create the vector.
Run this code
#include <numeric>
#include <algorithm>
#include <list>
#include <vector>
#include <iostream>
int main()
{
std::list<int> l(10);
std::iota(l.begin(), l.end(), -4);
std::vector<std::list<int>::iterator> v(l.size());
std::iota(v.begin(), v.end(), l.begin());
std::reverse(v.begin(), v.end());
std::cout << "Contents of the list: ";
for(auto n: l) {
std::cout << n << ' ';
}
std::cout << '\n';
std::cout << "Contents of the list, reversed: ";
for(auto i: v) {
std::cout << *i << ' ';
}
std::cout << '\n';
}
Output:
Contents of the list: -4 -3 -2 -1 0 1 2 3 4 5
Contents of the list, reversed: 5 4 3 2 1 0 -1 -2 -3 -4
See also
| copy-assigns the given value to every element in a range (function template) | |
| assigns the results of successive function calls to every element in a range (function template) |