Compartilhar via


Classe slice

Uma classe de utilitário para valarray que é usada para definir subconjuntos unidimensionais de um valarray pai. Se um valarray for considerado uma matriz bidimensional com todos os elementos em uma matriz, então a slice extrairá um vetor em uma dimensão da matriz bidimensional.

Comentários

A classe armazena os parâmetros que caracterizam um objeto do tipo slice_array. O subconjunto de um valarray é construído indiretamente quando um objeto da classe slice 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 no valarray.

  • Um comprimento total ou número de elementos na slice.

  • Um stride ou distância entre os índices de elementos no valarray.

Se o conjunto definido por uma slice for o subconjunto de um valarray constante, então a slice será um novo valarray. Se o conjunto definido por uma slice for o subconjunto de um valarray não constante, então a slice 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 slice forem distintos e todos os índices forem válidos.

Construtores

Construtor Descrição
slice Define um subconjunto de um valarray que consiste em uma coleção de elementos que estão a uma distância igual e que começam em um elemento especificado.

Funções de membro

Função de membro Descrição
size Encontra o número de elementos em uma slice de um valarray.
start Localiza o índice inicial de uma slice de um valarray.
stride Encontra a distância entre os elementos em uma slice de um valarray.

Requisitos

Cabeçalho:<valarray>

Namespace: std

slice::size

Encontra o número de elementos em uma slice de um valarray.

size_t size() const;

Valor retornado

O número de elementos em uma slice de um valarray.

Exemplo

// 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 um subconjunto de um valarray que consiste em uma coleção de elementos que estão a uma distância igual e que começam em um elemento especificado.

slice();

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

Parâmetros

_StartIndex
O índice do valarray do primeiro elemento no subconjunto.

_Len
O número de elementos no subconjunto.

stride
A distância entre elementos no subconjunto.

Valor retornado

O construtor padrão armazena zeros para o índice inicial, o comprimento total e o stride. O segundo construtor armazena _StartIndex para o índice inicial, _Len para o comprimento total e stride para o stride.

Comentários

O valor do stride pode ser negativo.

Exemplo

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

Localiza o índice inicial de uma slice de um valarray.

size_t start() const;

Valor retornado

O índice inicial de uma slice de um valarray.

Exemplo

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

Encontra a distância entre os elementos em uma slice de um valarray.

size_t stride() const;

Valor retornado

A distância entre os elementos em uma slice de um valarray.

Exemplo

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

Confira também

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