std::iota() algorithm
- since C++20
- since C++11
// (1)
template< class ForwardIt, class T >
constexpr void iota( ForwardIt first, ForwardIt last, T value );
// (1)
template< class ForwardIt, class T >
void iota( ForwardIt first, ForwardIt last, T value );
Fills the range [first
; last
) with sequentially increasing values, starting with value and repetitively evaluating ++value
.
Equivalent operation:
*(first) = value;
*(first + 1) = ++value;
*(first + 2) = ++value;
*(first + 3) = ++value;
...
Parameters
first second | The range of elements to fill with sequentially increasing values starting from |
value | Initial value to store. |
Type requirements
++value | Must be well-formed. |
Return value
(none)
Complexity
Exactly last - first
increments and assignments.
Exceptions
(none)
Possible implementation
iota(1)
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.
Examples
Main.cpp
#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 (auto const& n : l) std::cout << std::setw(2) << n << ' ';
std::cout << '\n';
std::cout << "Contents of l, viewed via shuffled v:\t";
for (auto const i : v) std::cout << std::setw(2) << *i << ' ';
std::cout << '\n';
}
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
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.
Hover to see the original license.