Namespaces
Variants

std:: end (std::valarray)

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

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

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

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

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++関連の専門用語(Parameters, Return value, Exceptions, Notes, Example, Defect reports, See also)は原文のまま保持しました - HTMLタグ、属性、クラス名、IDなどは一切変更していません - 数値や記号類もそのまま保持しています - フォーマットと構造は完全に維持しています

パラメータ

v - 数値配列

戻り値

数値配列の最後の値の次の位置を指すイテレータ。

例外

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

注記

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

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

#include <algorithm>
#include <iostream>
#include <valarray>
int main()
{
    const std::valarray<char> va
    {
        'H', 'e', 'l', 'l', 'o', 
        ',', ' ', 
        'C', '+', '+', '!', '\n'
    };
    std::for_each(std::begin(va), std::end(va),
                  [](char c){ std::cout << c; });
}

出力:

Hello, C++!

不具合報告

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

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

関連項目

std::beginをオーバーロード std::begin
(関数テンプレート)