Namespaces
Variants

std:: begin (std::valarray)

From cppreference.net
template < class T >
/* 詳細は後述 */ begin ( valarray < T > & v ) ;
(1) (C++11以降)
template < class T >
/* 詳細は後述 */ begin ( const valarray < T > & v ) ;
(2) (C++11以降)

valarray に対する std::begin のオーバーロードは、数値配列の最初の要素を参照する不特定型のイテレータを返します。

1) 戻り値の型は以下を満たさなければならない
(C++20以降)
  • メンバ型 value_type を持ち,それが T であること,および
  • メンバ型 reference を持ち,それが T& であること.
2) 戻り値の型は以下を満たさなければならない
(C++20以降)
  • メンバ型 value_type を持ち,それは T であること,および
  • メンバ型 reference を持ち,それは const T& であること.

この関数から返されるイテレータは、メンバー関数 resize() v に対して呼び出されたとき、または v の寿命が終了したときの、いずれか早い方の時点で無効化されます。

目次

パラメータ

v - 数値配列

戻り値

数値配列の最初の値へのイテレータ。

例外

実装定義の例外をスローする可能性があります。

注記

std::valarray 引数を取る他の関数とは異なり、 begin() は valarray を含む式から返される可能性のある置換型(式テンプレートによって生成される型など)を受け入れることができません: std:: begin ( v1 + v2 ) は移植性がなく、代わりに std:: begin ( std:: valarray < T > ( v1 + v2 ) ) を使用する必要があります。

この関数の意図は、 range for loops がvalarraysで動作できるようにすることであり、コンテナのセマンティクスを提供することではありません。

#include <algorithm>
#include <iostream>
#include <valarray>
void show(const std::valarray<int>& v)
{
    std::for_each(std::begin(v), std::end(v), [](int c)
    {
        std::cout << c << ' ';
    });
    std::cout << '\n';
};
int main()
{
    const std::valarray<int> x{47, 70, 37, 52, 90, 23, 17, 33, 22, 16, 21, 4};
    const std::valarray<int> y{25, 31, 71, 56, 21, 21, 15, 34, 21, 27, 12, 6};
    show(x); 
    show(y); 
    const std::valarray<int> z{x + y};
    for (char c : z)
        std::cout << c;
}

出力:

47 70 37 52 90 23 17 33 22 16 21 4 
25 31 71 56 21 21 15 34 21 27 12 6 
Hello, C++!

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2058 C++11 1. begin() は置換型をサポートする必要があった
2. 返されるイテレータが無効化されるタイミングは未規定
1. 不要
2. 規定済み

関連項目

std::end を特殊化
(関数テンプレート)