std::valarray
| ヘッダ <valarray>
|
||
template< class T >
class valarray;
|
||
std::valarray で定義されているクラスは、値の配列を表現および操作するためのものです。これは要素ごとの数学的演算と、さまざまな形式の汎用添字演算子、スライシング、間接アクセスをサポートしています。
テンプレートパラメータ
| T | - | 要素の型。この型は NumericType 要件を満たさなければならない |
メンバー型
| メンバー型 | 定義 |
value_type
|
T
|
メンバー関数
|
新しい数値配列を構築する
(公開メンバ関数) |
|
|
数値配列を破棄する
(公開メンバ関数) |
|
|
内容を代入する
(公開メンバ関数) |
|
|
valarrayの要素、スライス、またはマスクを取得/設定する
(公開メンバ関数) |
|
|
単項算術演算子をvalarrayの各要素に適用する
(公開メンバ関数) |
|
|
複合代入演算子をvalarrayの各要素に適用する
(公開メンバ関数) |
|
|
他のvalarrayと交換する
(公開メンバ関数) |
|
|
valarrayのサイズを返す
(公開メンバ関数) |
|
|
valarrayのサイズを変更する
(公開メンバ関数) |
|
|
全要素の合計を計算する
(公開メンバ関数) |
|
|
最小の要素を返す
(公開メンバ関数) |
|
|
最大の要素を返す
(公開メンバ関数) |
|
|
valarrayの要素をゼロ埋めシフトする
(公開メンバ関数) |
|
|
valarrayの要素を循環シフトする
(公開メンバ関数) |
|
|
関数をvalarrayの各要素に適用する
(公開メンバ関数) |
非メンバー関数
|
(C++11)
|
std::swap
アルゴリズムを特殊化する
(関数テンプレート) |
|
(C++11)
|
オーバーロード
std::begin
(関数テンプレート) |
|
(C++11)
|
std::end
を特殊化
(関数テンプレート) |
|
二項演算子を2つのvalarrayの各要素、またはvalarrayと値に適用する
(関数テンプレート) |
|
|
2つのvalarray、またはvalarrayと値を比較する
(関数テンプレート) |
|
|
valarrayの各要素に関数
abs
を適用する
(関数テンプレート) |
|
指数関数 |
|
|
valarrayの各要素に関数
std::exp
を適用する
(関数テンプレート) |
|
|
valarrayの各要素に関数
std::log
を適用する
(関数テンプレート) |
|
|
valarrayの各要素に関数
std::log10
を適用する
(関数テンプレート) |
|
累乗関数 |
|
|
関数
std::pow
を2つのvalarray、またはvalarrayと値に適用する
(関数テンプレート) |
|
|
valarrayの各要素に関数
std::sqrt
を適用する
(関数テンプレート) |
|
三角関数 |
|
|
valarrayの各要素に関数
std::sin
を適用する
(関数テンプレート) |
|
|
valarrayの各要素に関数
std::cos
を適用する
(関数テンプレート) |
|
|
valarrayの各要素に関数
std::tan
を適用する
(関数テンプレート) |
|
|
valarrayの各要素に関数
std::asin
を適用します
(関数テンプレート) |
|
|
valarrayの各要素に関数
std::acos
を適用する
(関数テンプレート) |
|
|
valarrayの各要素に関数
std::atan
を適用する
(関数テンプレート) |
|
|
valarrayと値に関数
std::atan2
を適用する
(関数テンプレート) |
|
双曲線関数 |
|
|
関数
std::sinh
をvalarrayの各要素に適用
(関数テンプレート) |
|
|
valarrayの各要素に関数
std::cosh
を適用する
(関数テンプレート) |
|
|
valarrayの各要素に関数
std::tanh
を適用します
(関数テンプレート) |
|
ヘルパークラス
|
BLASライクなvalarrayのスライス:開始インデックス、長さ、ストライド
(クラス) |
|
|
スライス適用後のvalarrayの部分集合へのプロキシ
(クラステンプレート) |
|
|
valarrayの一般化されたスライス:開始インデックス、長さの集合、ストライドの集合
(クラス) |
|
|
gslice適用後のvalarrayの部分集合へのプロキシ
(クラステンプレート) |
|
ブールマスク
operator[]
適用後のvalarrayの部分集合へのプロキシ
(クラステンプレート) |
|
間接
operator[]
適用後のvalarrayの部分集合へのプロキシ
(クラステンプレート) |
推論ガイド (C++17以降)
注記
std::valarray
およびヘルパークラスは特定のエイリアシングがないように定義されており、これらのクラスに対する操作がCプログラミング言語の
restrict
キーワードと同様の最適化を可能にします。さらに、
valarray
引数を取る関数や演算子はプロキシオブジェクトを返すことが許可されており、
v1
=
a
*
v2
+
v3
;
のような式を、
v1
[
i
]
=
a
*
v2
[
i
]
+
v3
[
i
]
;
のように一時オブジェクトや複数回の走査を回避する単一ループとしてコンパイラが最適化することを可能にします。しかしながら、
expression templates
によって同じ最適化技術が任意のC++コンテナで利用可能であり、ほとんどの数値計算ライブラリは柔軟性の観点からvalarrayよりもexpression templatesを優先しています。一部のC++標準ライブラリ実装では
std::valarray
の効率的な操作を実装するためにexpression templatesを使用しています(例:GNU libstdc++ と LLVM libc++)。valarrayがさらに最適化されることは稀であり、例としては
Intel Integrated Performance Primitives
などがあります。
欠陥報告
以下の動作を変更する欠陥報告は、以前に公開されたC++標準に遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 修正後の動作 |
|---|---|---|---|
| P3016R6 | C++11 | 1) valarrayメンバ型が欠けていた iteratorおよび 2)const_iteratorvalarray非メンバ関数と関数に一貫性がなかったbegin() end()
|
1) メンバ型を追加 2) メンバ関数に変更 |
関連項目
|
(C++26)
|
幅を指定できる
basic_simd
の便利なエイリアステンプレート
(エイリアステンプレート) |
|
(C++26)
|
幅を指定できる
basic_simd_mask
の便利なエイリアステンプレート
(エイリアステンプレート) |
|
(parallelism TS v2)
|
データ並列ベクトル型
(クラステンプレート) |
|
(parallelism TS v2)
|
要素型がboolのデータ並列型
(クラステンプレート) |