namespace std {
template <class T>
class mask_array;
}
概要
mask_array
クラスは、非const
なvalarray
オブジェクトからvalarray<bool>
によって抽出した要素を、参照するためのクラスである。抽出条件となるvalarray<bool>
は、抽出元のvalarray<T>
と同じ長さを持つ配列であり、その各要素は、true
なら対応する要素を抽出し、false
なら対応する要素を抽出しないことを表す。
このクラスのオブジェクトは、valarray
クラスのoperator[]
によって返される。
なお、メンバ関数の引数型に ValOrProxy
と表記している箇所は、valarray<T>
と代理の型のいずれでも受け取ることが可能であることを表している。
<valarray>
の概要も参照のこと。
テンプレートパラメータは、以下を意味する:
T
:valarray
クラスの要素型T
と同じ型
メンバ関数
構築・破棄
名前 | 説明 | 対応バージョン |
---|---|---|
(constructor) |
コンストラクタ | |
~mask_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};
std::valarray<bool> mask = {false, true, false,
true, false, true};
// trueに対応する要素のみを抽出する
std::mask_array<int> result = va[mask];
// 抽出した要素を書き換える
result *= std::valarray<int>(2, 3);
for (int x : va) {
std::cout << x << std::endl;
}
}
xxxxxxxxxx
#include <iostream>
#include <valarray>
int main()
{
std::valarray<int> va = {1, 2, 3,
4, 5, 6};
std::valarray<bool> mask = {false, true, false,
true, false, true};
// trueに対応する要素のみを抽出する
std::mask_array<int> result = va[mask];
// 抽出した要素を書き換える
result *= std::valarray<int>(2, 3);
for (int x : va) {
std::cout << x << std::endl;
}
}
出力
1
4
3
8
5
12