# std::indirect_array

< cpp‎ | numeric‎ | valarray

定义于头文件 `<valarray>` |  |
template< class T > class indirect_array; |  |

`std::indirect_array` 是 std::valarray 对 std::valarray<std::size_t> 的下标运算符所用的帮助模板。它拥有到间接数组（ std::valarray<std::size_t> 对象）所指定的数组子集的引用语义。

### 成员类型

类型 | 定义
`value_type` | `T`

### 成员函数

(构造函数) | 构造一个 `indirect_array` (公开成员函数)
(析构函数) | 销毁一个 `indirect_array` (公开成员函数)
operator= | 赋值内容 (公开成员函数)
operator+=operator-=operator*=operator/=operator%=operator&=operator|=operator^=operator<<=operator>>= | 在间接数组所指代的数组上进行算术运算。 (公开成员函数)

### 示例

    #include <iostream>
    #include <valarray>

    int main()
    {
        std::valarray<int> data = {0,1,2,3,4,5,6,7,8,9};

        std::valarray<std::size_t> idx = {0,2,4,6,8};

        std::cout << "Original valarray: ";
        for(int n: data) std::cout << n << ' ';
        std::cout << '\n';

        data[idx] += data[idx]; // 令在下标 'idx' 的值变为双倍

        // data[idx] 的类型是 std::indirect_array<int>

        std::cout << "After indirect modification: ";
        for(int n: data) std::cout << n << ' ';
        std::cout << '\n';
    }

输出：

    Original valarray: 0 1 2 3 4 5 6 7 8 9
    After indirect modification: 0 1 4 3 8 5 12 7 16 9