Classe gslice
Uma classe de utilitário para valarray
que é usada para definir subconjuntos multidimensionais de um valarray
. Se um valarray
for considerado uma matriz multidimensional com todos os elementos em uma matriz, então gslice
extrairá um vetor da matriz multidimensional.
Comentários
A classe armazena os parâmetros que caracterizam um objeto do tipo gslice_array
. O subconjunto de um valarray
é construído indiretamente quando um objeto da classe gslice
aparece como argumento para um objeto da classe valarray<Type>
. Os valores armazenados que especificam o subconjunto selecionado do valarray
pai incluem:
Um índice inicial.
Um vetor de tamanho da classe
valarray<size_t>
.Um vetor de passo da classe
valarray<size_t>
.
Os dois vetores devem ter o mesmo tamanho.
Se o conjunto definido por uma gslice
for o subconjunto de um valarray
constante, então a gslice
será um novo valarray
. Se o conjunto definido por uma gslice
for o subconjunto de um valarray
não constante, então a gslice
terá semântica de referência ao valarray
original. O mecanismo de avaliação para objetos valarray
não constantes economiza tempo e memória.
As operações em objetos valarray
são garantidas somente se os subconjuntos de origem e destino definidos pelos objetos gslice
forem distintos e todos os índices forem válidos.
Construtores
Construtor | Descrição |
---|---|
gslice |
Define um subconjunto de um valarray que consiste em várias fatias do valarray que são iniciados todos em um elemento especificado. |
Funções de membro
Função de membro | Descrição |
---|---|
size |
Encontra os valores da matriz especificando os números dos elementos em uma fatia geral de um valarray . |
start |
Localiza o índice inicial de uma fatia geral de um valarray . |
stride |
Encontra a distância entre os elementos em uma fatia geral de um valarray . |
Requisitos
Cabeçalho:<valarray>
Namespace: std
gslice::gslice
Uma classe de utilitário para valarray
usada para definir fatias multidimensionais de uma valarray
.
gslice();
gslice(
size_t _StartIndex,
const valarray<size_t>& _LenArray,
const valarray<size_t>& _IncArray);
Parâmetros
_StartIndex
O índice do valarray
do primeiro elemento no subconjunto.
_LenArray
Uma valarray
que especifica o número de elementos em cada gslice
.
_IncArray
Uma valarray
que especifica a distância em cada gslice
.
Valor retornado
O construtor padrão armazena zero para o índice inicial e vetores de comprimento zero para os vetores de comprimento e distância. O segundo construtor armazena _StartIndex
para o índice inicial, _LenArray
para a matriz de tamanho e _IncArray
para a matriz de distância.
Comentários
gslice
define um subconjunto de um valarray
que consiste em várias fatias do valarray
que são iniciados todos em um elemento especificado. A capacidade de usar matrizes para definir várias fatias é a única diferença entre gslice
e slice::slice
. A primeira fatia tem um primeiro elemento com um índice de _StartIndex
, uma contagem de elementos especificado pelo primeiro elemento de _LenArray
e uma distância fornecida pelo primeiro elemento de _IncArray
. O conjunto seguinte de fatias ortogonais tem os primeiros elementos fornecidos pela primeira fatia. O segundo elemento de _LenArray
especifica o número de elementos. A distância é fornecida pelo segundo elemento de _IncArray
. Uma terceira dimensão de fatias tomaria os elementos do array bidimensional como os elementos iniciais e continuaria de forma análoga.
Exemplo
// 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
Encontra os valores da matriz especificando os números dos elementos em uma fatia geral de um valarray
.
valarray<size_t> size() const;
Valor retornado
Um valarray
que especifica o número de elementos em cada fatia de uma fatia geral de um valarray
.
Comentários
A função membro retorna os tamanhos armazenados das fatias.
Exemplo
// 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
Localiza o índice inicial de uma fatia geral de um valarray
.
size_t start() const;
Valor retornado
O índice inicial de uma fatia geral de um valarray
.
Exemplo
// 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
Encontra a distância entre os elementos em uma fatia geral de um valarray
.
valarray<size_t> stride() const;
Valor retornado
Um valarray
que especifica as distâncias entre os elementos em cada fatia de uma fatia geral de um valarray
.
Exemplo
// 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 ).