# std::slice_array

< cpp‎ | numeric‎ | valarray

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

`std::slice_array` 是 std::slice 的下标运算符所用的帮助模板。它拥有到 `std::slice` 对象所指定的数组子集的引用语义。

### 成员类型

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

### 成员函数

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

### 示例

    #include <iostream>
    #include <valarray>

    class Matrix {
        int dim;
        std::valarray<int> data;
    public:
        explicit Matrix(int dim, int init = 0)
            : dim{dim}, data(init, dim*dim) {}
        void clear(int value = 0) { data = value; }
        void identity() { clear(); diagonal() = 1; }
        int& operator()(int x, int y) { return data[dim * y + x]; }

        std::slice_array<int> diagonal() {
            return data[std::slice(0, dim, dim+1)];
        }
        std::slice_array<int> secondary_diagonal() {
            return data[std::slice(dim-1, dim, dim-1)];
        }
        std::slice_array<int> row(std::size_t row) {
            return data[std::slice(dim*row, dim, 1)];
        }
        std::slice_array<int> column(std::size_t col) {
            return data[std::slice(col, dim, dim)];
        }
        void print(char term = '\n') const {
            for (unsigned i = 0; i != data.size(); ++i)
                std::cout << data[i] << (((i+1) % dim) ? ' ' : '\n');
            std::cout << term;
        }
    };

    int main()
    {
        Matrix m{3};
        m.identity();
        m.print();

        m.clear(1);
        m.secondary_diagonal() = 3;
        m.print();

        m.clear();
        m.row(1) = std::valarray<int>{4, 5, 6};
        m.print();

        m.clear();
        m.column(1) = std::valarray<int>{7, 8, 9};
        m.print();
    }

输出：

    1 0 0
    0 1 0
    0 0 1

    1 1 3
    1 3 1
    3 1 1

    0 0 0
    4 5 6
    0 0 0

    0 7 0
    0 8 0
    0 9 0

### 参阅

gslice_array | valarray 应用 gslice 后的子集的代理 (类模板)