最終更新日時(UTC):
が更新

履歴 編集

function template
<numeric>

std::iota(C++11)

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;
  }
}

出力

0
1
2
3
4
5
6
7
8
9

バージョン

言語

  • C++11

処理系

実装例

template <class ForwardIterator, class T>
void iota(ForwardIterator first, ForwardIterator last, T value)
{
  for (; first != last; ++first) {
    *first = value;
    ++value;
  }
}

参照