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

履歴 編集

function template
<numeric>

std::ranges::iota(C++23)

namespace std::ranges {
  // (1)
  template<input_or_output_iterator O, sentinel_for<O> S, weakly_incrementable T>
    requires indirectly_writable<O, const T&>
  constexpr iota_result<O, T> iota(O first, S last, T value);

  // (2)
  template<weakly_incrementable T, output_range<const T&> R>
  constexpr iota_result<borrowed_iterator_t<R>, T> iota(R&& r, T value);
}

概要

指定された値から始まる、インクリメント演算子による増加列を生成する。

  • (1): イテレータペアで範囲を指定する
  • (2): 範囲を直接指定する

iota()関数は、値の範囲[value, value + (last - first))を前から順番に範囲[first, last)の各要素に代入する。

これは、連続した値のシーケンスが必要な場合に使用する。

効果

範囲[first, last)の各要素itについて、先頭から順番に *it = value; ++value; を行う

戻り値

{ .out = last, .value = value + (last - first) }

計算量

範囲[first, last)の要素数をnとして、n回のインクリメントと代入が行われる。

備考

この関数は、APL言語の「原始関数ι(イオタ)」に由来する。

#include <numeric>
#include <iostream>
#include <array>

int main()
{
  // 0から始まる10要素のシーケンスを作成する。
  // iota()関数に与えるシーケンスの要素数分だけ値が生成されるため、
  // 可変長のコンテナを与える場合には、事前に必要な要素数に
  // リサイズしておく必要がある
  std::array<int, 10> ar;
  std::ranges::iota(ar, 0);

  for (int x : ar) {
    std::cout << x << std::endl;
  }
}

出力

0
1
2
3
4
5
6
7
8
9

バージョン

言語

  • C++23

処理系

関連項目

参照