29 Numerics library [numerics]

29.7 Numeric arrays [numarray]

29.7.6 The gslice class [class.gslice]

29.7.6.1 The gslice class overview [class.gslice.overview]

namespace std {
  class gslice {
  public:
    gslice();
    gslice(size_t s, const valarray<size_t>& l, const valarray<size_t>& d);

    size_t           start() const;
    valarray<size_t> size() const;
    valarray<size_t> stride() const;
  };
}
This class represents a generalized slice out of an array.
A gslice is defined by a starting offset (s), a set of lengths (), and a set of strides ().
The number of lengths shall equal the number of strides.
A gslice represents a mapping from a set of indices (), equal in number to the number of strides, to a single index k.
It is useful for building multidimensional array classes using the valarray template, which is one-dimensional.
The set of one-dimensional index values specified by a gslice are

where the multidimensional indices range in value from 0 to .

[Example
:
The gslice specification
start  = 3
length = {2, 4, 3}
stride = {19, 4, 1}
yields the sequence of one-dimensional indices

which are ordered as shown in the following table:

	
		,    
		,    
		,    
		,    
		,    
		,    
		, 
		, 
		, 
		, 
		, 
		, 
		, 
		, 
		      
		
That is, the highest-ordered index turns fastest.
end example
]
It is possible to have degenerate generalized slices in which an address is repeated.
[Example
:
If the stride parameters in the previous example are changed to {1, 1, 1}, the first few elements of the resulting sequence of indices will be
	,  
	,  
	,  
	,  
	,  
	,  
	
end example
]
If a degenerate slice is used as the argument to the non-const version of operator[](const gslice&), the behavior is undefined.