Condividi tramite


Classe slice

Classe di utilità utilizzata valarray per definire subset unidimensionali di un elemento padre valarray. Se un valarray oggetto viene considerato come una matrice bidimensionale con tutti gli elementi di una matrice, estrae slice un vettore in una dimensione dalla matrice bidimensionale.

Osservazioni:

La classe archivia i parametri che caratterizzano un oggetto di tipo slice_array. Il subset di un valarray oggetto viene costruito indirettamente quando un oggetto della classe slice viene visualizzato come argomento per un oggetto della classe valarray<Type>. I valori archiviati che specificano il subset selezionato dall'elemento padre valarray includono:

  • Indice iniziale in valarray.

  • Lunghezza totale o numero di elementi nell'oggetto slice.

  • Stride o distanza tra gli indici degli elementi nell'oggetto valarray.

Se il set definito da è slice il subset di una costante valarray, l'oggetto slice è un nuovo valarrayoggetto . Se il set definito da è slice il sottoinsieme di un oggetto non predefinito valarray, l'oggetto ha una slice semantica di riferimento per l'oggetto originale valarray. Il meccanismo di valutazione per gli oggetti non costanti valarray consente di risparmiare tempo e memoria.

Le operazioni sugli valarray oggetti sono garantite solo se i subset di origine e di destinazione definiti dagli slice oggetti sono distinti e tutti gli indici sono validi.

Costruttori

Costruttore Descrizione
slice Definisce un subset di un oggetto valarray costituito da una raccolta di elementi separati da una distanza uguale e che iniziano in corrispondenza di un elemento specificato.

Funzioni membro

Funzione membro Descrizione
size Trova il numero di elementi in un slice oggetto di .valarray
start Trova l'indice iniziale di un slice oggetto .valarray
stride Trova la distanza tra gli elementi di un slice oggetto valarray.

Requisiti

Intestazione:<valarray>

Spazio dei nomi: std

slice::size

Trova il numero di elementi in un slice oggetto di .valarray

size_t size() const;

Valore restituito

Numero di elementi in un slice oggetto di .valarray

Esempio

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

Definisce un subset di un oggetto valarray costituito da una raccolta di elementi separati da una distanza uguale e che iniziano in corrispondenza di un elemento specificato.

slice();

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

Parametri

_StartIndex
Indice valarray del primo elemento nel subset.

_Len
Numero di elementi del subset.

stride
Distanza tra gli elementi del subset.

Valore restituito

Il costruttore predefinito archivia zero per l'indice iniziale, la lunghezza totale e lo stride. Il secondo costruttore archivia _StartIndex per l'indice iniziale, _Len per la lunghezza totale e stride per lo stride.

Osservazioni:

Il stride valore può essere negativo.

Esempio

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

Trova l'indice iniziale di un slice oggetto .valarray

size_t start() const;

Valore restituito

Indice iniziale di un slice oggetto di .valarray

Esempio

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

Trova la distanza tra gli elementi di un slice oggetto valarray.

size_t stride() const;

Valore restituito

Distanza tra gli elementi di slice un oggetto valarray.

Esempio

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

Vedi anche

Thread safety nella libreria standard C++