std::valarray<T>:: operator[]
|
const
T
&
operator
[
]
(
std::
size_t
pos
)
const
;
|
(1) | |
|
T
&
operator
[
]
(
std::
size_t
pos
)
;
|
(2) | |
|
std::
valarray
<
T
>
operator
[
]
(
std::
slice
slicearr
)
const
;
|
(3) | |
|
std::
slice_array
<
T
>
operator
[
]
(
std::
slice
slicearr
)
;
|
(4) | |
|
std::
valarray
<
T
>
operator
[
]
(
const
std::
gslice
&
gslicearr
)
const
;
|
(5) | |
|
std::
gslice_array
<
T
>
operator
[
]
(
const
std::
gslice
&
gslicearr
)
;
|
(6) | |
|
std::
valarray
<
T
>
operator
[
]
(
const
std::
valarray
<
bool
>
&
boolarr
)
const
;
|
(7) | |
|
std::
mask_array
<
T
>
operator
[
]
(
const
std::
valarray
<
bool
>
&
boolarr
)
;
|
(8) | |
|
std::
valarray
<
T
>
operator
[
]
(
const
std::
valarray
<
std::
size_t
>
&
indarr
)
const
;
|
(9) | |
|
std::
indirect_array
<
T
>
operator
[
]
(
const
std::
valarray
<
std::
size_t
>
&
indarr
)
;
|
(10) | |
配列の単一要素または一部を取得します。
constオーバーロードは要素シーケンスを返し、新しい const std::valarray オブジェクトを作成します。 非const const オーバーロードは、配列要素への参照を保持するクラスを返します。
目次 |
、
、
パラメータ
| pos | - | 返す要素の位置 |
| slicearr | - | slice 返す要素のスライス |
| gslicearr | - | gslice 返す要素の一般化スライス |
| boolarr | - | 返す要素のマスク |
| indarr | - | 返す要素のインデックス |
戻り値
例外
実装定義の例外をスローする可能性があります。
注記
適切な std::valarray 値 a 、 b および適切な std::size_t 値 i 、 j について、以下の全ての式は常に true と評価されます:
- これは要素内にエイリアスが存在せず、この特性を利用していくつかの種類の最適化を実行できることを意味します。
参照は
resize()
時、または配列が破棄された際に無効になります。
オーバーロード (3,5,7,9) の場合、この関数は std::valarray とは異なる戻り値の型で実装される可能性があります。この場合、置換型は以下の特性を持ちます:
-
- const メンバ関数の全てが std::valarray に対して提供される。
- std::valarray 、 std::slice_array 、 std::gslice_array 、 std::mask_array および std::indirect_array は置換型から構築可能である。
- const std:: valarray < T > & を引数に取る各関数に対して begin() および end() を除く (C++11以降) 、置換型を取る同一の関数が追加される;
- 2つの const std:: valarray < T > & 引数を取る各関数に対して、 const std:: valarray < T > & と置換型のあらゆる組み合わせを取る同一の関数が追加される。
- 戻り値の型は、最も深くネストされた引数型に対して2段階以上のテンプレートネストを追加しない。
スライス/マスク/間接インデックスアクセスは連鎖できません: v [ v == n ] [ std:: slice ( 0 , 5 , 2 ) ] = x ; はエラーとなります。なぜなら std::mask_array ( v [ v == n ] の型) は operator [ ] を持たないためです。
例
#include <cstddef> #include <iomanip> #include <iostream> #include <valarray> int main() { std::valarray<int> data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; std::cout << "Initial valarray: "; for (int n : data) std::cout << std::setw(3) << n; std::cout << '\n'; data[data > 5] = -1; // valarray<bool> overload of operator[] // the type of data > 5 is std::valarray<bool> // the type of data[data > 5] is std::mask_array<int> std::cout << "After v[v > 5] = -1:"; for (std::size_t n = 0; n < data.size(); ++n) std::cout << std::setw(3) << data[n]; // regular operator[] std::cout << '\n'; }
出力:
Initial valarray: 0 1 2 3 4 5 6 7 8 9 After v[v > 5] = -1: 0 1 2 3 4 5 -1 -1 -1 -1
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 389 | C++98 |
オーバーロード
(1)
の戻り値型は
T
であった
|
const T & に修正 |
| LWG 430 | C++98 |
オーバーロード
(3-10) について、無効なサブセットが指定された場合の動作が不明確であった |
この場合の動作は
未定義である |