最終更新日時:
が更新

履歴 編集

class template
<valarray>

std::indirect_array

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

概要

indirect_arrayクラスは、非constvalarrayオブジェクトからvalarray<size_t>によって抽出した要素を、参照するためのクラスである。抽出条件となるvalarray<size_t>は、元のvalarray<T>から抽出する要素のインデックス値から成る配列である。

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

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

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

メンバ関数

構築・破棄

名前 説明 対応バージョン
(constructor) コンストラクタ
~indirect_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::valarray<std::size_t> mask = {1, 3, 5};

  // maskの要素である各インデックス値に
  // 対応する要素のみを抽出する
  std::indirect_array<int> result = va[mask];

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

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

出力

1
4
3
8
5
12