Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::gslice

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

      std::gslice is the selector class that identifies a subset ofstd::valarray indices defined by a multi-level set of strides and sizes. Objects of typestd::gslice can be used as indices with valarray'soperator[] to select, for example, columns of a multidimensional array represented as avalarray.

      Given the starting values, a list of stridesij and a list of sizesdj, astd::gslice constructed from these values selects the set of indiceskj=s+Σj(ijdj).

      For example, a gslice with starting index3, strides{19,4,1} and lengths{2,4,3} generates the following set of24=2*4*3 indices:

      3+0*19+0*4+0*1=3,
      3+0*19+0*4+1*1=4,
      3+0*19+0*4+2*1=5,
      3+0*19+1*4+0*1=7,
      3+0*19+1*4+1*1=8,
      3+0*19+1*4+2*1=9,
      3+0*19+2*4+0*1=11,
      ...
      3+1*19+3*4+1*1=35,
      3+1*19+3*4+2*1=36

      It is possible to constructstd::gslice objects that select some indices more than once: if the above example used the strides{1,1,1}, the indices would have been{3, 4, 5, 4, 5, 6, ...}. Such gslices may only be used as arguments to the const version ofstd::valarray::operator[], otherwise the behavior is undefined.

      Contents

      [edit]Member functions

      (constructor)
      constructs a generic slice
      (public member function)
      startsizestride
      returns the parameters of the slice
      (public member function)

      std::gslice::gslice

      gslice()
      (1)
      gslice(std::size_t start,conststd::valarray<std::size_t>& sizes,
                                 conststd::valarray<std::size_t>& strides);
      (2)
      gslice(const gslice& other);
      (3)

      Constructs a new generic slice.

      1) Default constructor. Equivalent togslice(0,std::valarray<std::size_t>(),std::valarray<std::size_t>()). This constructor exists only to allow construction of arrays of slices.
      2) Constructs a new slice with parametersstart,sizes,strides.
      3) Constructs a copy ofother.

      Parameters

      start - the position of the first element
      sizes - an array that defines the number of elements in each dimension
      strides - an array that defines the number of positions between successive elements in each dimension
      other - another slice to copy


      std::slice::start, size, stride

      std::size_t start()const;
      (1)
      (2)
      std::valarray<std::size_t> stride()const;
      (3)

      Returns the parameters passed to the slice on construction - start, sizes and strides respectively.

      Parameters

      (none)

      Return value

      The parameters of the slice -- start, sizes and strides respectively.

      Complexity

      Constant.

      [edit]Example

      Demonstrates the use of gslices to address columns of a 3D array:

      Run this code
      #include <iostream>#include <valarray> void test_print(std::valarray<int>& v,int planes,int rows,int cols){for(int r=0; r< rows;++r){for(int z=0; z< planes;++z){for(int c=0; c< cols;++c)std::cout<< v[z* rows* cols+ r* cols+ c]<<' ';std::cout<<"  ";}std::cout<<'\n';}} int main(){std::valarray<int> v=// 3d array: 2 x 4 x 3 elements{111,112,113 ,121,122,123 ,131,132,133 ,141,142,143,211,212,213 ,221,222,223 ,231,232,233 ,241,242,243};// int ar3d[2][4][3]std::cout<<"Initial 2x4x3 array:\n";    test_print(v,2,4,3); // update every value in the first columns of both planes    v[std::gslice(0,{2,4},{4*3,3})]=1;// two level one strides of 12 elements// then four level two strides of 3 elements // subtract the third column from the second column in the 1st plane    v[std::gslice(1,{1,4},{4*3,3})]-= v[std::gslice(2,{1,4},{4*3,3})]; std::cout<<"\n""After column operations:\n";    test_print(v,2,4,3);}

      Output:

      Initial 2x4x3 array:111 112 113   211 212 213121 122 123   221 222 223131 132 133   231 232 233141 142 143   241 242 243 After column operations:1 -1 113   1 212 2131 -1 123   1 222 2231 -1 133   1 232 2331 -1 143   1 242 243

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 543C++98it was unclear whether a default constructed generic slice is usableit is usable (as an empty subset)

      [edit]See also

      get/set valarray element, slice, or mask
      (public member function)[edit]
      BLAS-like slice of a valarray: starting index, length, stride
      (class)[edit]
      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/gslice&oldid=148641"

      [8]ページ先頭

      ©2009-2025 Movatter.jp