名前空間
変種
操作

std::valarray::operator[]

提供: cppreference.com
< cpp‎ | numeric‎ | valarray
 
 
 
 
(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 オーバーロードは配列要素への参照を保持するクラスを返します。

目次

[編集] 引数

[編集] 戻り値

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::mask_array (v[v==n] の型) が operator[] を持たないため、 v[v==n][std::slice(0,5,2)] = x; はエラーです。

[編集]

#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