最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

class template
<valarray>

# std::slice_array

    namespace std {
      template <class T>
      class slice_array;
    }

## 概要

`slice_array`クラスは、非`const`な`valarray`オブジェクトから`slice`によって抽出した要素を、参照するためのクラスである。

このクラスのオブジェクトは、`valarray`クラスの`operator[]`によって返される。

なお、メンバ関数の引数型に `ValOrProxy` と表記している箇所は、`valarray<T>` と代理の型のいずれでも受け取ることが可能であることを表している。
`<valarray>` の概要も参照のこと。

テンプレートパラメータは、以下を意味する：

- `T` : `valarray`クラスの要素型`T`と同じ型

## メンバ関数

### 構築・破棄

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ |
`~slice_array() = default;` | デストラクタ |
`operator=` | 代入演算子 |

### 四則演算

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator+=` | 加算の複合代入 |
`operator-=` | 減算の複合代入 |
`operator*=` | 乗算の複合代入 |
`operator/=` | 除算の複合代入 |
`operator%=` | 剰余算の複合代入 |

### ビット演算

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator&=` | 論理積の複合代入 |
`operator|=` | 論理和の複合代入 |
`operator^=` | 排他的論理和の複合代入 |
`operator<<=` | 左シフトの複合代入 |
`operator>>=` | 右シフトの複合代入 |

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`value_type` | 要素型`T` |

## 例

    #include <iostream>
    #include <valarray>

    int main()
    {
      std::valarray<int> va = {1, 2, 3, 4, 5, 6};

      const std::size_t start = 1u;  // 開始位置
      const std::size_t length = 3u; // 要素数
      const std::size_t stride = 2u; // 何個置きに処理するか

      std::slice_array<int> result = va[std::slice(start, length, stride)];

      // 抽出した要素を書き換える
      result *= std::valarray<int>(2, length);

      for (int x : va) {
        std::cout << x << std::endl;
      }
    }

### 出力

    1
    4
    3
    8
    5
    12