最終更新日時: 2019年04月24日 12時50分01秒 (JST)
Mitsuru Kariya が更新

履歴 編集

<valarray>

# valarray

`<valarray>`ヘッダは、数値計算に特化した配列クラスである `valarray` と、基礎的な数学的処理を行うための関数オーバーロードを定義したライブラリである。

このヘッダで定義される任意の `valarray<T>` 型を返す関数は（メンバ関数、非メンバ関数とも）、式テンプレートでの実装を可能とするため `valarray<T>` 型以外の代理の型を返すことが規格で許可されている。 このような代理の型には、`valarray` の全ての `const` メンバ関数が提供される。 また、このような代理の型を提供する処理系では、以下のような関数も提供される。

- 本ヘッダで提供される、`const valarray<T>&` を 1 つだけ引数に持つ全ての関数は、提供される代理の型も引数として受け付ける。
  （ただし、`begin` と `end` を除く）
- 本ヘッダで提供される、`const valarray<T>&` を 2 つ引数に持つ全ての関数は、当該代理の型と `valarray<T>` の任意の組み合わせも引数として受け付ける。

これらを踏まえ、本リファレンスではこれらの代理の型が使用されうる箇所は `ValOrProxy` として表記している。戻り値型に `ValOrProxy` と表記している箇所は、`valarray<T>` か代理の型のいずれかであることを、引数型に `ValOrProxy` と表記している箇所は、`valarray<T>` と代理の型のいずれでも受け取ることが可能であることを表している。

このヘッダでは、以下の標準ヘッダをインクルードする：

- `<initializer_list>` (C++11)

## 配列クラス

クラス | 説明 | 対応バージョン
--- | --- | ---
`valarray` | 数値演算に特化した配列クラス |

## スライス指示

以下は、`valarray`クラスの配列から条件一致した要素を抽出するための、ヘルパークラスである。

クラス | 説明 | 対応バージョン
--- | --- | ---
`slice` | スライス指示用のヘルパークラス |
`gslice` | `slice`をより一般化したスライス指示用のヘルパークラス |

## スライス結果の配列クラス

以下は、`valarray`クラスの`operator[]`メンバ関数によって返される、スライス結果の配列クラスである。これらのクラスは、配列のコピーは保持せず、元となる`valarray`オブジェクトの要素を参照する。

クラス | 説明 | 対応バージョン
--- | --- | ---
`slice_array` | `valarray`から`slice`によって要素抽出した結果となる配列クラス |
`gslice_array` | `valarray`から`gslice`によって要素抽出した結果となる配列クラス |
`mask_array` | `valarray`から`valarray<bool>`を指定して要素抽出した結果となる配列クラス |
`indirect_array` | `valarray`から`valarray<size_t>`を指定して要素抽出した結果となる配列クラス |

## 参照

- N2930 Range-Based For Loop Wording (Without Concepts)
  `valarray` に `begin` と `end` が追加された提案
- LWG Issue 2058. valarray and begin/end
  `valarray` の代理の型に `begin` と `end` は適用できないとした経緯