namespace std {
template <class T>
class indirect_array;
}
概要
indirect_array
クラスは、非const
なvalarray
オブジェクトから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