std::valarray<T>::operator[]
提供: cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
| (1) | ||
T operator[]( std::size_t pos ) const; |
(C++11未満) | |
const T& operator[]( std::size_t pos ) const; |
(C++11以上) | |
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 valarray<bool>& boolarr ) const; |
(7) | |
std::mask_array<T> operator[]( const valarray<bool>& boolarr ); |
(8) | |
std::valarray<T> operator[]( const valarray<std::size_t>& indarr ) const; |
(9) | |
std::indirect_array<T> operator[]( const valarray<std::size_t>& indarr ); |
(10) | |
配列の単一要素または一部分を取得します。
要素列を返す const オーバーロードは新しい std::valarray を作成します。
非 const オーバーロードは配列要素への参照を保持するクラスを返します。
引数
| This section is incomplete Reason: Explain the parameters |
戻り値
1,2) 対応する要素への参照。
3,5,7,9) 選択された項目のコピーを保持する std::valarray オブジェクト。
4,6,8,10) 選択された項目への参照を保持する対応するデータ構造。
例外
処理系定義の例外が投げられるかもしれません。
事前条件
選択される要素は存在していなければなりません。
ノート
iおよびjの適切な値について、以下の性質が成り立ちます。
1)
(a[i] = q, a[i]) == q
- (非 const な
aの場合)
2)
&a[i+j] == &a[i] + j
- これは valarray の要素がメモリ内で隣接していることを意味します。
3)
&a[i] != &b[j]
- これはお互いのエイリアスでないすべてのオブジェクト
aおよびbについて成り立ちます。 - これは要素内にエイリアスがなく、この性質がある種の最適化を行うために使用できることを意味します。
- 参照は resize 時または配列が破棄されたとき無効になります。
オーバーロード (3,5,7,9) について、関数は std::valarray と異なる戻り値の型を使用して実装することができます。 この場合、その置換型は以下の性質を持ちます。
- std::valarray のすべての
constメンバ関数が提供されます。 - 置換型から std::valarray、
std::slice_array、std::gslice_array、std::mask_arrayおよびstd::indirect_arrayが構築できます。 const std::valarray&型の引数を取るすべての関数 ( begin() と end() を除く) (C++11以上) は置換型も受理するべきです。const std::valarray&型の引数を2つ取るすべての関数はconst std::valarray&と置換型のすべての組み合わせを受理するべきです。- 戻り値の型は最も深くネストした引数型より3段以上ネストしたテンプレートを追加しません。
- std::valarray のすべての
スライス、マスク、間接インデックスアクセスはチェーンしません。 std::mask_array (v[v==n] の型) が operator[] を持たないため、 v[v==n][std::slice(0,5,2)] = x; はエラーです。
例
Run this code
#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 << 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 << 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