std::slice_array

来自cppreference.com
< cpp‎ | numeric‎ | valarray
 
 
 
 
 
在标头 <valarray> 定义
template< class T > class slice_array;

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

成员类型

类型 定义
value_type T

成员函数

构造一个 slice_array
(公开成员函数)
销毁一个 slice_array
(公开成员函数)
赋值内容
(公开成员函数)
在切片所指代的数组上进行算术运算。
(公开成员函数)

示例

#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

参阅

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