Namespaces
Variants

std::valarray<T>:: operator[]

From cppreference.net
HTMLタグ、属性、コード内のテキストは翻訳せず、元のフォーマットを保持しました。C++固有の用語も翻訳していません。 (注:指定されたHTML要素には翻訳対象のテキストコンテンツが含まれていないため、元の構造を保持したまま出力します)
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 オーバーロードは、配列要素への参照を保持するクラスを返します。

1,2)

pos < size ( ) false の場合、動作は未定義です。

(C++26まで)

pos < size ( ) false の場合:

  • 実装が ハードニング されている場合、 契約違反 が発生します。さらに、契約違反ハンドラが「observe」評価セマンティクスの下で戻った場合、動作は未定義です。
  • 実装がハードニングされていない場合、動作は未定義です。
(C++26以降)
3-10) 引数が * this の有効なサブセットを指定しない場合、動作は未定義です。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - HTMLタグ、属性、
タグ内のテキストは翻訳していません
- C++固有の用語(Parameters、Return value、Exceptions、Notes、Example、Defect reports)は原文のまま保持しています
- 元の書式と構造を完全に保持しています

パラメータ

pos - 返す要素の位置
slicearr - slice 返す要素のスライス
gslicearr - gslice 返す要素の一般化スライス
boolarr - 返す要素のマスク
indarr - 返す要素のインデックス

戻り値

1,2) 対応する要素への参照。
3,5,7,9) 選択された要素のコピーを含む std::valarray オブジェクト。
4,6,8,10) 選択された項目への参照を含む対応するデータ構造。

例外

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

注記

適切な std::valarray a b および適切な std::size_t i j について、以下の全ての式は常に true と評価されます:

1) ( a [ i ] = q, a [ i ] ) == q non-const a の場合
2) & a [ i + j ] == & a [ i ] + j
  • これは、 std::valarray の要素がメモリ上で連続していることを意味します。
3) & a [ i ] ! = & b [ j ] 互いにエイリアスではないすべてのオブジェクト a および b に対して
  • これは要素内にエイリアスが存在せず、この特性を利用していくつかの種類の最適化を実行できることを意味します。

参照は resize() 時、または配列が破棄された際に無効になります。

オーバーロード (3,5,7,9) の場合、この関数は std::valarray とは異なる戻り値の型で実装される可能性があります。この場合、置換型は以下の特性を持ちます:

スライス/マスク/間接インデックスアクセスは連鎖できません: 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) について、無効なサブセットが指定された場合の動作が不明確であった
この場合の動作は
未定義である