• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function template
    <numeric>

    std::iota

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

    参照