Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
A utility class to valarray that's used to define one-dimensional subsets of a parent valarray. If a valarray is regarded as a two-dimensional matrix with all elements in an array, then the slice extracts a vector in one dimension out of the two-dimensional array.
Remarks
The class stores the parameters that characterize an object of type slice_array. The subset of a valarray is indirectly constructed when an object of class slice appears as an argument for an object of class valarray<Type>. The stored values that specify the subset selected from the parent valarray include:
- A starting index in the - valarray.
- A total length, or number of elements in the - slice.
- A stride, or distance between the indices of elements in the - valarray.
If the set defined by a slice is the subset of a constant valarray, then the slice is a new valarray. If the set defined by a slice is the subset of a nonconstant valarray, then the slice has reference semantics to the original valarray. The evaluation mechanism for nonconstant valarray objects saves time and memory.
Operations on valarray objects are guaranteed only if the source and destination subsets defined by the slice objects are distinct and all indices are valid.
Constructors
| Constructor | Description | 
|---|---|
| slice | Defines a subset of a valarraythat consists of a collection of elements that are an equal distance apart and that start at a specified element. | 
Member functions
| Member function | Description | 
|---|---|
| size | Finds the number of elements in a sliceof avalarray. | 
| start | Finds the starting index of a sliceof avalarray. | 
| stride | Finds the distance between elements in a sliceof avalarray. | 
Requirements
Header: <valarray>
Namespace: std
 slice::size
Finds the number of elements in a slice of a valarray.
size_t size() const;
Return value
The number of elements in a slice of a valarray.
Example
// slice_size.cpp
// compile with: /EHsc
#include <valarray>
#include <iostream>
int main( )
{
   using namespace std;
   int i;
   size_t sizeVA, sizeVAR;
   valarray<int> va ( 20 ), vaResult;
   for ( i = 0 ; i < 20 ; i += 1 )
      va [ i ] =  i+1;
   cout << "The operand valarray va is:\n ( ";
      for ( i = 0 ; i < 20 ; i++ )
         cout << va [ i ] << " ";
   cout << ")." << endl;
   sizeVA = va.size ( );
   cout << "The size of the valarray is: "
        << sizeVA << "." << endl << endl;
   slice vaSlice ( 3 , 6 , 3 );
   vaResult = va [ vaSlice ];
   cout << "The slice of valarray va is vaResult = "
        << "va[slice( 3, 6, 3)] =\n ( ";
      for ( i = 0 ; i < 6 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;
   sizeVAR = vaSlice.size ( );
   cout << "The size of slice vaSlice is: "
        << sizeVAR << "." << endl;
}
The operand valarray va is:
( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ).
The size of the valarray is: 20.
The slice of valarray va is vaResult = va[slice( 3, 6, 3)] =
( 4 7 10 13 16 19 ).
The size of slice vaSlice is: 6.
 slice::slice
Defines a subset of a valarray that consists of a collection of elements that are an equal distance apart and that start at a specified element.
slice();
slice(
    size_t _StartIndex,
    size_t _Len,
    size_t stride);
Parameters
_StartIndex
The valarray index of the first element in the subset.
_Len
The number of elements in the subset.
stride
The distance between elements in the subset.
Return value
The default constructor stores zeros for the starting index, total length, and stride. The second constructor stores _StartIndex for the starting index, _Len for the total length, and stride for the stride.
Remarks
The stride value may be negative.
Example
// slice_ctor.cpp
// compile with: /EHsc
#include <valarray>
#include <iostream>
int main( )
{
   using namespace std;
   int i;
   valarray<int> va ( 20 ), vaResult;
   for ( i = 0 ; i < 20 ; i+=1 )
      va [ i ] =  2 * (i + 1 );
   cout << "The operand valarray va is:\n( ";
      for ( i = 0 ; i < 20 ; i++ )
         cout << va [ i ] << " ";
   cout << ")." << endl;
   slice vaSlice ( 1 , 7 , 3 );
   vaResult = va [ vaSlice ];
   cout << "\nThe slice of valarray va is vaResult:"
        << "\nva[slice( 1, 7, 3)] = ( ";
      for ( i = 0 ; i < 7 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;
}
The operand valarray va is:
( 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 ).
The slice of valarray va is vaResult:
va[slice( 1, 7, 3)] = ( 4 10 16 22 28 34 40 ).
 slice::start
Finds the starting index of a slice of a valarray.
size_t start() const;
Return value
The starting index of a slice of a valarray.
Example
// slice_start.cpp
// compile with: /EHsc
#include <valarray>
#include <iostream>
int main( )
{
   using namespace std;
   int i;
   size_t startVAR;
   valarray<int> va ( 20 ), vaResult;
   for ( i = 0 ; i < 20 ; i += 1 )
      va [ i ] = i+1;
   cout << "The operand valarray va is:\n ( ";
      for ( i = 0 ; i < 20 ; i++ )
         cout << va [ i ] << " ";
   cout << ")." << endl;
   slice vaSlice ( 3 , 6 , 3 );
   vaResult = va [ vaSlice ];
   cout << "The slice of valarray va is vaResult = "
        << "va[slice( 3, 6, 3)] =\n ( ";
      for ( i = 0 ; i < 6 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;
   startVAR = vaSlice.start ( );
   cout << "The start index of slice vaSlice is: "
        << startVAR << "." << endl;
}
The operand valarray va is:
( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ).
The slice of valarray va is vaResult = va[slice( 3, 6, 3)] =
( 4 7 10 13 16 19 ).
The start index of slice vaSlice is: 3.
 slice::stride
Finds the distance between elements in a slice of a valarray.
size_t stride() const;
Return value
The distance between elements in a slice of a valarray.
Example
// slice_stride.cpp
// compile with: /EHsc
#include <valarray>
#include <iostream>
int main( )
{
   using namespace std;
   int i;
   size_t strideVAR;
   valarray<int> va ( 20 ), vaResult;
   for ( i = 0 ; i < 20 ; i += 1 )
      va [ i ] =  3 * ( i + 1 );
   cout << "The operand valarray va is:\n ( ";
      for ( i = 0 ; i < 20 ; i++ )
         cout << va [ i ] << " ";
   cout << ")." << endl;
   slice vaSlice ( 4 , 5 , 3 );
   vaResult = va [ vaSlice ];
   cout << "The slice of valarray va is vaResult = "
        << "va[slice( 4, 5, 3)] =\n ( ";
      for ( i = 0 ; i < 5 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;
   strideVAR = vaSlice.stride ( );
   cout << "The stride of slice vaSlice is: "
        << strideVAR << "." << endl;
}
The operand valarray va is:
( 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 ).
The slice of valarray va is vaResult = va[slice( 4, 5, 3)] =
( 15 24 33 42 51 ).
The stride of slice vaSlice is: 3.