table of contents
        
      
      
    - Tumbleweed 2024.07.05-1.3
 - Leap-16.0
 - Leap-15.6
 
| std::gslice_array(3) | C++ Standard Libary | std::gslice_array(3) | 
NAME¶
std::gslice_array - std::gslice_array
Synopsis¶
 Defined in header <valarray>
  
   template< class T > class gslice_array;
  
   std::gslice_array is a helper template used by the valarray subscript
    operator with
  
   std::gslice argument. It has reference semantics to a subset of the array
    specified
  
   by the std::gslice object.
Member types¶
 Type Definition
  
   value_type T
Member functions¶
 constructor constructs a gslice_array
  
   (public member function)
  
   destructor destroys a gslice_array
  
   (public member function)
  
   operator= assigns contents
  
   (public member function)
  
   operator+=
  
   operator-=
  
   operator*=
  
   operator/=
  
   operator%= performs arithmetic operation on the array referred by generic
    slice.
  
   operator&= (public member function)
  
   operator|=
  
   operator^=
  
   operator<<=
  
   operator>>=
Example¶
// Run this code
  
   #include <cassert>
  
   #include <cstddef>
  
   #include <iomanip>
  
   #include <iostream>
  
   #include <numeric>
  
   #include <valarray>
  
   int main()
  
   {
  
   std::valarray<int> data(32);
  
   std::iota(std::begin(data), std::end(data), 0);
  
   const std::size_t offset = 1, z = 2, y = 3, x = 4;
  
   const std::valarray<std::size_t> sizes{z, y, x};
  
   const std::valarray<std::size_t> strides{15, 5, 1};
  
   const std::gslice gslice = std::gslice(offset, sizes, strides);
  
   // Indices are generated according to the formula:
  
   // index[k] = offset + [0,1,2)*15 + [0,1,2,3)*5 + [0,1,2,3,4)*1
  
   // = offset + inner_product(sizes[k], strides);
  
   // where sizes[k] = {[0,z), [0,y), [0,x)}, while the rightmost index (x)
  
   // runs fastest. As a result we have following set of indices:
  
   // index[0] = 1 + 0*15 + 0*5 + 0*1 = 1
  
   // index[1] = 1 + 0*15 + 0*5 + 1*1 = 2
  
   // index[2] = 1 + 0*15 + 0*5 + 2*1 = 3
  
   // index[3] = 1 + 0*15 + 0*5 + 3*1 = 4
  
   // index[4] = 1 + 0*15 + 1*5 + 0*1 = 6
  
   // index[5] = 1 + 0*15 + 1*5 + 1*1 = 7
  
   // index[6] = 1 + 0*15 + 1*5 + 2*1 = 8
  
   // index[7] = 1 + 0*15 + 1*5 + 3*1 = 9
  
   // ...
  
   // index[22] = 1 + 1*15 + 2*5 + 2*1 = 28
  
   // index[23] = 1 + 1*15 + 2*5 + 3*1 = 29
  
   const std::valarray<int> indices = data[gslice];
  
   for (unsigned i = 0; i != indices.size(); ++i)
  
   std::cout << std::setfill('0') << std::setw(2) <<
    indices[i] << ' ';
  
   std::cout << "\nTotal indices: " << indices.size()
    << '\n';
  
   assert(indices.size() == x * y * z);
  
   data = 0;
  
   std::gslice_array<int> gslice_array = data[gslice];
  
   gslice_array = 1;
  
   // Cells that correspond to generated indices = '1', skipped cells = '0'.
  
   for (auto i : data)
  
   std::cout << i << ' ';
  
   std::cout << "\nSum of ones = " << data.sum() <<
    '\n';
  
   }
Output:¶
 01 02 03 04 06 07 08 09 11 12 13 14 16 17 18 19 21 22 23 24 26 27
    28 29
  
   Total indices: 24
  
   0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0
  
   Sum of ones = 24
See also¶
 slice_array proxy to a subset of a valarray after applying a
    slice
  
   (class template)
| 2024.06.10 | http://cppreference.com |