std::slice_array
来自cppreference.com
在标头 <valarray> 定义
|
||
template< class T > class slice_array; |
||
std::slice_array
是 std::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 后的子集的代理 (类模板) |