Compartir a través de


Clase slice

Clase de utilidad para valarray que se usa para definir subconjuntos unidimensionales de una valarray primaria. Si una valarray se considera como una matriz bidimensional con todos los elementos de una matriz, slice extrae un vector en una dimensión de la matriz bidimensional.

Comentarios

La clase almacena los parámetros que caracterizan a un objeto de tipo slice_array. El subconjunto de una valarray se crea indirectamente cuando un objeto de clase slice aparece como argumento de un objeto de clase valarray<Type>. Los valores almacenados que especifican el subconjunto seleccionado de la valarray primaria incluyen:

  • Índice inicial de la valarray.

  • Longitud total o número de elementos en el slice.

  • Un intervalo, o la distancia entre índices de los elementos de la valarray.

Si el conjunto definido por un slice es el subconjunto de una constante valarray, slice es un valarray nuevo. Si el conjunto definido por un slice es el subconjunto de una valarray no constante, slice tiene semántica de referencia a la valarray original. El mecanismo de evaluación para objetos valarray no constantes ahorra tiempo y memoria.

Las operaciones en objetos valarray solo se garantizan si los subconjuntos de origen y de destino definidos por los objetos slice son distintos y todos los índices son válidos.

Constructores

Constructor Descripción
slice Define un subconjunto de un valarray que consta de una colección de elementos equidistantes y que comienzan en un elemento especificado.

Funciones miembro

Función de miembro Descripción
size Busca el número de elementos en un slice de una valarray.
start Busca el índice inicial de un slice de una valarray.
stride Busca la distancia entre los elementos de un slice de una valarray.

Requisitos

Encabezado:<valarray>

Espacio de nombres: std

slice::size

Busca el número de elementos en un slice de una valarray.

size_t size() const;

Valor devuelto

Número de elementos en un slice de una valarray.

Ejemplo

// 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

Define un subconjunto de un valarray que consta de una colección de elementos equidistantes y que comienzan en un elemento especificado.

slice();

slice(
    size_t _StartIndex,
    size_t _Len,
    size_t stride);

Parámetros

_StartIndex
El índice de valarray del primer elemento del subconjunto.

_Len
El número de elementos del subconjunto.

stride
La distancia entre los elementos del subconjunto.

Valor devuelto

El constructor predeterminado almacena ceros para el índice de inicio, la longitud total y el intervalo. El segundo constructor almacena _StartIndex para el índice de inicio, _Len para la longitud total y stride para el intervalo.

Comentarios

El valor stride puede ser negativo.

Ejemplo

// 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

Busca el índice inicial de un slice de una valarray.

size_t start() const;

Valor devuelto

Índice inicial de un slice de una valarray.

Ejemplo

// 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

Busca la distancia entre los elementos de un slice de una valarray.

size_t stride() const;

Valor devuelto

Distancia entre los elementos de un slice de una valarray.

Ejemplo

// 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.

Vea también

Seguridad de subprocesos en la biblioteca estándar de C++