Compartilhar via


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

Confira também

Segurança de thread na Biblioteca Padrão do C++