namespace std {
template <class ForwardIterator, class T>
void
iota(ForwardIterator first, ForwardIterator last, T value); // (1) C++11
template <class ForwardIterator, class T>
constexpr void
iota(ForwardIterator first, ForwardIterator last, T value); // (1) C++20
}
概要
指定された値から始まる整数列を生成する。
iota()
関数は、値の範囲[value, value + (last - first))
を前から順番に範囲[first, last)
の各要素に代入する。
これは、連続した値のシーケンスが必要な場合に使用する。
要件
ForwardIterator
の値型が、型T
に変換可能であること- 型
T
の値val
に対して、式++val
が有効であること
効果
イテレータ範囲[first, last)
の各要素it
について、先頭から順番に *it = value; ++value;
を行う
戻り値
なし
計算量
イテレータ範囲[first, last)
の要素数をnとして、n回のインクリメントと代入が行われる。
備考
この関数は、APL言語の「原始関数ι(イオタ)」に由来する。
例
#include <numeric>
#include <iostream>
#include <array>
int main()
{
// 0から始まる10要素のシーケンスを作成する。
// iota()関数に与えるシーケンスの要素数分だけ値が生成されるため、
// 可変長のコンテナを与える場合には、事前に必要な要素数に
// リサイズしておく必要がある
std::array<int, 10> ar;
std::iota(ar.begin(), ar.end(), 0);
for (int x : ar) {
std::cout << x << std::endl;
}
}
xxxxxxxxxx
#include <numeric>
#include <iostream>
#include <array>
int main()
{
// 0から始まる10要素のシーケンスを作成する。
// iota()関数に与えるシーケンスの要素数分だけ値が生成されるため、
// 可変長のコンテナを与える場合には、事前に必要な要素数に
// リサイズしておく必要がある
std::array<int, 10> ar;
std::iota(ar.begin(), ar.end(), 0);
for (int x : ar) {
std::cout << x << std::endl;
}
}
出力
0
1
2
3
4
5
6
7
8
9
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.5 ✅
- ICC: ??
- Visual C++: 2008 ✅
実装例
template <class ForwardIterator, class T>
void iota(ForwardIterator first, ForwardIterator last, T value)
{
for (; first != last; ++first) {
*first = value;
++value;
}
}
参照
- N2569 More STL algorithms
- N2666 More STL algorithms (revision 2)
- P1645R1
constexpr
for<numeric>
algorithms- C++20で、並列バージョン以外の数値計算アルゴリズムが
constexpr
対応した
- C++20で、並列バージョン以外の数値計算アルゴリズムが