Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::slice_array

      From cppreference.com
      <cpp‎ |numeric‎ |valarray
       
       
       
      std::valarray
      Member functions
      Non-member functions
      Helper classes
      Deduction guides(C++17)
       
       
      Defined in header<valarray>
      template<class T>class slice_array;

      std::slice_array is a helper template used by thevalarray subscript operator withstd::slice argument. It has reference semantics to a subset of the array specified by thestd::slice object.

      Contents

      [edit]Member types

      Type Definition
      value_typeT

      [edit]Member functions

      constructs aslice_array
      (public member function)[edit]
      destroys aslice_array
      (public member function)[edit]
      assigns contents
      (public member function)[edit]
      performs arithmetic operation on the array referred by slice.
      (public member function)[edit]

      [edit]Example

      Run this code
      #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)];}template<unsigned,unsigned>friendclass MatrixStack;}; template<unsigned dim=3,unsigned max=8>class MatrixStack{std::valarray<int> stack;unsigned count=0;public:    MatrixStack(): stack(dim* dim* max){}void print_all()const{std::valarray<int> row(dim*count);for(unsigned r=0; r!= dim;++r)// screen row{            row= stack[std::gslice(r* dim,{count, dim},{dim* dim,1})];for(unsigned i=0; i!= row.size();++i)std::cout<< row[i]<<((i+1)% dim?" ":" │ ");std::cout<<'\n';}}void push_back(Matrixconst& m){if(count< max){            stack[std::slice(count* dim* dim, dim* dim,1)]= m.data[std::slice(0, dim* dim,1)];++count;}}}; int main(){constexprint dim=3;    Matrix m{dim};    MatrixStack<dim,12> stack;     m.identity();    stack.push_back(m);     m.clear(1);    m.secondary_diagonal()=3;    stack.push_back(m); for(int i=0; i!= dim;++i){        m.clear();        m.row(i)= i+1;        stack.push_back(m);} for(int i=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 │

      [edit]See also

      proxy to a subset of a valarray after applying a gslice
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/numeric/valarray/slice_array&oldid=160829"

      [8]ページ先頭

      ©2009-2025 Movatter.jp