namespace std {
template <class T>
unspecified1 end(valarray<T>& va); // (1)
template <class T>
unspecified2 end(const valarray<T>& va); // (2)
}
概要
末尾の次を指すイテレータを取得する。
戻り値
末尾の次を指すイテレータを返す。この関数によって返されるイテレータは、ランダムアクセスイテレータの要件を満たす型である。
unspecified1は非const
なランダムアクセスイテレータ、unspecified2はconst
なランダムアクセスイテレータである。
備考
- この関数によって返されるイテレータは、
resize()
メンバ関数が呼び出されると無効になる -
valarray
オブジェクト同士の演算結果を型推論する場合 (auto
、decltype
、関数テンプレートなど)、以下のようなコードは実装によってコンパイルエラーになる可能性がある: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
と表記)は、式テンプレートによる最適化を考慮して、代理の型を返すことが許可されているが、begin
とend
はその代理の型を受け取りが可能であることを求められていないためである。
<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
処理系
- Clang: 3.0 ✅
- GCC: 4.6.4 ✅
- ICC: ??
- Visual C++: ??