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