Compartir vía


Clase gslice

Clase de utilidad para valarray que se usa para definir conjuntos multidimensionales de una valarray. Si una valarray se considera como una matriz multidimensional con todos los elementos de una matriz, gslice extrae un vector de la matriz multidimensional.

Comentarios

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

  • Un índice de inicio.

  • Un vector de longitud de la clase valarray<size_t>.

  • Un vector de intervalo de la clase valarray<size_t>.

Los dos vectores deben tener la misma longitud.

Si el conjunto definido por un gslice es el subconjunto de una constante valarray, gslice es un valarray nuevo. Si el conjunto definido por un gslice es el subconjunto de una valarray no constante, gslice 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 gslice son distintos y todos los índices son válidos.

Constructores

Constructor Descripción
gslice Define un subconjunto de un valarray que consta de varios segmentos de la valarray que todas comienzan a partir de un elemento especificado.

Funciones miembro

Función de miembro Descripción
size Busca los valores de la matriz especificando el número de elementos en un segmento general de un valarray.
start Busca el índice inicial de un segmento general de un valarray.
stride Busca la distancia entre los elementos de un segmento general de un valarray.

Requisitos

Encabezado:<valarray>

Espacio de nombres: std

gslice::gslice

Clase de utilidad para valarray que se usa para definir sectores multidimensionales de una valarray.

gslice();

gslice(
    size_t _StartIndex,
    const valarray<size_t>& _LenArray,
    const valarray<size_t>& _IncArray);

Parámetros

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

_LenArray
Una valarray que especifica el número de elementos de cada gslice.

_IncArray
Una valarray que especifica el intervalo de cada gslice.

Valor devuelto

El constructor predeterminado almacena cero para el índice de inicio y vectores de longitud cero para los vectores de longitud e intervalo. El segundo constructor almacena _StartIndex para el índice de inicio, _LenArray para la matriz de longitud y _IncArray para la matriz de intervalo.

Comentarios

gslice define un subconjunto de un valarray que consta de varios segmentos de la valarray que empiezan todas en el mismo elemento especificado. La única diferencia entre gslice y slice::slice es la capacidad de usar matrices para definir varios segmentos. El primer segmento tiene un primer elemento con un índice de _StartIndex, un recuento de elementos especificado por el primer elemento de _LenArray y un intervalo especificado por el primer elemento de _IncArray. El siguiente conjunto de segmentos ortogonales tiene primeros elementos proporcionados por el primer segmento. El segundo elemento de _LenArray especifica el número de elementos. El intervalo viene determinado por el segundo elemento de _IncArray. Una tercera dimensión de segmentos podría tomar los elementos de la matriz bidimensional como los elementos de inicio y continuar de manera análoga.

Ejemplo

// gslice_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 ] =  i;

   cout << "The operand valarray va is:" << endl << "(";
   for ( i = 0 ; i < 20 ; i++ )
      cout << " " << va [ i ];
   cout << " )" << endl;

   valarray<size_t> Len ( 2 ), Stride ( 2 );
   Len [0] = 4;
   Len [1] = 4;
   Stride [0] = 7;
   Stride [1] = 4;

   gslice vaGSlice ( 0, Len, Stride );
   vaResult = va [ vaGSlice ];

   cout << "The valarray for vaGSlice is vaResult:" << endl
        << "va[vaGSlice] = (";

   for ( i = 0 ; i < 8 ; i++ )
      cout << " " << vaResult [ i ];
   cout << ")" << endl;
}
The operand valarray va is:
( 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 )
The valarray for vaGSlice is vaResult:
va[vaGSlice] = ( 0 4 8 12 7 11 15 19)

gslice::size

Busca los valores de la matriz especificando el número de elementos en un segmento general de un valarray.

valarray<size_t> size() const;

Valor devuelto

valarray que especifica el número de elementos de cada segmento de un segmento general de una valarray.

Comentarios

La función miembro devuelve las longitudes almacenadas de los segmentos.

Ejemplo

// gslice_size.cpp
// compile with: /EHsc
#include <valarray>
#include <iostream>

int main( )
{
   using namespace std;
   int i;
   size_t sizeVA;

   valarray<int> va ( 20 ), vaResult;
   for ( i = 0 ; i < 20 ; i+=1 )
      va [ i ] =  i;

   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;

   valarray<size_t> Len ( 2 ), Stride ( 2 );
   Len [0] = 4;
   Len [1] = 4;
   Stride [0] = 7;
   Stride [1] = 4;

   gslice vaGSlice ( 0, Len, Stride );
   vaResult = va [ vaGSlice ];
   const valarray <size_t> sizeGS = vaGSlice.size ( );

   cout << "The valarray for vaGSlice is vaResult:"
        << "\n va[vaGSlice] = ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;

   cout << "The size of vaResult is:"
        << "\n vaGSlice.size ( ) = ( ";
      for ( i = 0 ; i < 2 ; i++ )
         cout << sizeGS[ i ] << " ";
   cout << ")." << endl;
}
The operand valarray va is:
( 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ).
The size of the valarray is: 20.

The valarray for vaGSlice is vaResult:
va[vaGSlice] = ( 0 4 8 12 7 11 15 19 ).
The size of vaResult is:
vaGSlice.size ( ) = ( 4 4 ).

gslice::start

Busca el índice inicial de un segmento general de un valarray.

size_t start() const;

Valor devuelto

Índice inicial de un segmento general de una valarray.

Ejemplo

// gslice_start.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 ] =  i;

   cout << "The operand valarray va is:\n ( ";
      for ( i = 0 ; i < 20 ; i++ )
         cout << va [ i ] << " ";
   cout << ")." << endl;

   valarray<size_t> Len ( 2 ), Stride ( 2 );
   Len [0] = 4;
   Len [1] = 4;
   Stride [0] = 7;
   Stride [1] = 4;

   gslice vaGSlice ( 0, Len, Stride );
   vaResult = va [ vaGSlice ];
   size_t vaGSstart = vaGSlice.start ( );

   cout << "The valarray for vaGSlice is vaResult:"
        << "\n va[vaGSlice] = ( ";
      for (i = 0 ; i < 8 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;

   cout << "The index of the first element of vaResult is: "
        << vaGSstart << "." << endl;
}
The operand valarray va is:
( 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ).
The valarray for vaGSlice is vaResult:
va[vaGSlice] = ( 0 4 8 12 7 11 15 19 ).
The index of the first element of vaResult is: 0.

gslice::stride

Busca la distancia entre los elementos de un segmento general de un valarray.

valarray<size_t> stride() const;

Valor devuelto

valarray que especifica las distancias entre elementos de cada segmento de un segmento general de una valarray.

Ejemplo

// gslice_stride.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 ] =  i;

   cout << "The operand valarray va is:\n ( ";
      for (i = 0 ; i < 20 ; i++ )
         cout << va [ i ] << " ";
   cout << ")." << endl;

   valarray<size_t> Len ( 2 ), Stride ( 2 );
   Len [0] = 4;
   Len [1] = 4;
   Stride [0] = 7;
   Stride [1] = 4;

   gslice vaGSlice ( 0, Len, Stride );
   vaResult = va [ vaGSlice ];
   const valarray <size_t> strideGS = vaGSlice.stride ( );

   cout << "The valarray for vaGSlice is vaResult:"
        << "\n va[vaGSlice] = ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;

   cout << "The strides of vaResult are:"
        << "\n vaGSlice.stride ( ) = ( ";
      for ( i = 0 ; i < 2 ; i++ )
         cout << strideGS[ i ] << " ";
   cout << ")." << endl;

}
The operand valarray va is:
( 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ).
The valarray for vaGSlice is vaResult:
va[vaGSlice] = ( 0 4 8 12 7 11 15 19 ).
The strides of vaResult are:
vaGSlice.stride ( ) = ( 7 4 ).

Vea también

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