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

履歴 編集

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[]によって返される。

なお、メンバ関数の引数型に ValOrProxy と表記している箇所は、valarray<T> と代理の型のいずれでも受け取ることが可能であることを表している。
<valarray> の概要も参照のこと。

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

  • 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