std::end(std::valarray)
From cppreference.com
| 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) 戻り値の型は
- ミュータブルな LegacyRandomAccessIterator の要件を満たし、
|
(C++20以降) |
- メンバ型
value_typeがTであり、 - メンバ型
referenceがT&である必要があります。
2) 戻り値の型は
- コンスタントな LegacyRandomAccessIterator の要件を満たし、
|
(C++20以降) |
- メンバ型
value_typeがTであり、 - メンバ型
referenceがconst T&である必要があります。
この関数から返されるイテレータは、v に対してメンバ関数 resize() が呼び出されるか、v の生存期間が終了するかのいずれか早い方が発生すると無効になります。
目次 |
[編集] パラメータ
| v | - | 数値配列 |
[編集] 戻り値
数値配列の最後の値の次を指すイテレータ。
[編集] 例外
実装定義の例外をスローする場合があります。
[編集] 注記
std::valarray 引数を受け取る他の関数とは異なり、end() は valarray を含む式によって返される可能性のある置換型(式テンプレートによって生成される型など)を受け入れることができません。std::end(v1 + v2) は移植性がありません。代わりに std::end(std::valarray<T>(v1 + v2)) を使用する必要があります。
この関数の意図は、valarray で範囲 for ループを機能させることであり、コンテナのセマンティクスを提供することではありません。
[編集] 例
このコードを実行
#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. 指定された |
[編集] 関連項目
| (C++11) |
std::begin をオーバーロードする (function template) |