最終更新日時(UTC):
が更新

履歴 編集

class template
<valarray>

std::mask_array

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

概要

mask_arrayクラスは、非constvalarrayオブジェクトから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;
  }
}

出力

1
4
3
8
5
12