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

履歴 編集

function template
<valarray>

std::begin (非メンバ関数)(C++11)

namespace std {
  template <class T>
  unspecified1 begin(valarray<T>& va);       // (1)

  template <class T>
  unspecified2 begin(const valarray<T>& va); // (2)
}

概要

先頭の要素を指すイテレータを取得する。

戻り値

先頭要素を指すイテレータを返す。この関数によって返されるイテレータは、ランダムアクセスイテレータの要件を満たす型である。

unspecified1は非constなランダムアクセスイテレータ、unspecified2constなランダムアクセスイテレータである。

備考

  • この関数によって返されるイテレータは、resize()メンバ関数が呼び出されると無効になる
  • valarrayオブジェクト同士の演算結果を型推論する場合 (autodecltype、関数テンプレートなど)、以下のようなコードは実装によってコンパイルエラーになる可能性がある:

    std::valarray<double> a = {1.0, 2.0, 3.0};
    std::valarray<double> b = {1.0, 2.0, 3.0};
    auto c = a + b;
    
    // 以下の2行がコンパイルエラーになる可能性がある
    auto first = std::begin(c); // 変数cの型をautoではなく、
    auto last = std::end(c);    // std::valarray<double>にする必要がある
    

    これは、std::valarray<T> 型を返す関数(本リファレンスでは戻り値型を ValOrProxy と表記)は、式テンプレートによる最適化を考慮して、代理の型を返すことが許可されているが、beginend はその代理の型を受け取りが可能であることを求められていないためである。
    <valarray> の概要も参照のこと。

#include <iostream>
#include <valarray>
#include <algorithm>

int main()
{
  std::valarray<int> va = {1, 2, 3};

  std::for_each(std::begin(va), std::end(va), [](int x) {
    std::cout << x << std::endl;
  });
}

出力

1
2
3

バージョン

言語

  • C++11

処理系

参照