template<classT>classslice_array;std::slice_array is a helper template used by the
with std::slice argument. It has reference semantics to a subset of the array specified by the std::slice object.
Member types
Type Definition value_typeTMember functions
Example
Run this code
#include<iostream>#include<valarray>classMatrix{intdim;std::valarray<int>data;public:explicitMatrix(intdim,intinit=0):dim{dim},data(init,dim*dim){}voidclear(intvalue=0){data=value;}voididentity(){clear();diagonal()=1;}int&operator()(intx,inty){returndata[dim*y+x];}std::slice_array<int>diagonal(){returndata[std::slice(0,dim,dim+1)];}std::slice_array<int>secondary_diagonal(){returndata[std::slice(dim-1,dim,dim-1)];}std::slice_array<int>row(std::size_trow){returndata[std::slice(dim*row,dim,1)];}std::slice_array<int>column(std::size_tcol){returndata[std::slice(col,dim,dim)];}template<unsigned,unsigned>friendclassMatrixStack;};template<unsigneddim=3,unsignedmax=8>classMatrixStack{std::valarray<int>stack;unsignedcount=0;public:MatrixStack():stack(dim*dim*max){}voidprint_all()const{std::valarray<int>row(dim*count);for(unsignedr=0;r!=dim;++r)// screen row{row=stack[std::gslice(r*dim,{count,dim},{dim*dim,1})];for(unsignedi=0;i!=row.size();++i)std::cout<<row[i]<<((i+1)%dim?" ":" │ ");std::cout<<'\n';}}voidpush_back(Matrixconst&m){if(count<max){stack[std::slice(count*dim*dim,dim*dim,1)]=m.data[std::slice(0,dim*dim,1)];++count;}}};intmain(){constexprintdim=3;Matrixm{dim};MatrixStack<dim,12>stack;m.identity();stack.push_back(m);m.clear(1);m.secondary_diagonal()=3;stack.push_back(m);for(inti=0;i!=dim;++i){m.clear();m.row(i)=i+1;stack.push_back(m);}for(inti=0;i!=dim;++i){m.clear();m.column(i)=i+1;stack.push_back(m);}m.clear();m.row(1)=std::valarray<int>{4,5,6};stack.push_back(m);m.clear();m.column(1)=std::valarray<int>{7,8,9};stack.push_back(m);stack.print_all();}Output:
1 0 0 │ 1 1 3 │ 1 1 1 │ 0 0 0 │ 0 0 0 │ 1 0 0 │ 0 2 0 │ 0 0 3 │ 0 0 0 │ 0 7 0 │ 0 1 0 │ 1 3 1 │ 0 0 0 │ 2 2 2 │ 0 0 0 │ 1 0 0 │ 0 2 0 │ 0 0 3 │ 4 5 6 │ 0 8 0 │ 0 0 1 │ 3 1 1 │ 0 0 0 │ 0 0 0 │ 3 3 3 │ 1 0 0 │ 0 2 0 │ 0 0 3 │ 0 0 0 │ 0 9 0 │ See also
proxy to a subset of a valarray after applying a gslice
(class template)