Condividi tramite


Classe gslice

Classe di utilità utilizzata valarray per definire subset multidimensionali di un oggetto valarray. Se un valarray oggetto viene considerato come una matrice multidimensionale con tutti gli elementi di una matrice, estrae gslice un vettore dalla matrice multidimensionale.

Osservazioni:

La classe archivia i parametri che caratterizzano un oggetto di tipo gslice_array. Il subset di un valarray oggetto viene costruito indirettamente quando un oggetto della classe gslice 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.

  • Vettore di lunghezza della classe valarray<size_t>.

  • Vettore stride della classe valarray<size_t>.

I due vettori devono avere la stessa lunghezza.

Se il set definito da è gslice il subset di una costante valarray, l'oggetto gslice è un nuovo valarrayoggetto . Se il set definito da è gslice il sottoinsieme di un oggetto non predefinito valarray, l'oggetto ha una gslice 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 gslice oggetti sono distinti e tutti gli indici sono validi.

Costruttori

Costruttore Descrizione
gslice Definisce un subset di un valarray formato da più sezioni del valarray, che iniziano tutte dall'elemento specificato.

Funzioni membro

Funzione membro Descrizione
size Trova i valori della matrice che specificano il numero di elementi in una sezione generale di un valarray.
start Trova l'indice iniziale di una sezione generale di un valarray.
stride Trova la distanza tra gli elementi in una sezione generale di un valarray.

Requisiti

Intestazione:<valarray>

Spazio dei nomi: std

gslice::gslice

Classe di utilità utilizzata valarray per definire sezioni multidimensionali di un oggetto valarray.

gslice();

gslice(
    size_t _StartIndex,
    const valarray<size_t>& _LenArray,
    const valarray<size_t>& _IncArray);

Parametri

_StartIndex
Indice valarray del primo elemento nel subset.

_LenArray
Oggetto valarray che specifica il numero di elementi in ogni gsliceoggetto .

_IncArray
Oggetto valarray che specifica lo stride in ogni gsliceoggetto .

Valore restituito

Il costruttore predefinito archivia zero per l'indice iniziale e vettori di lunghezza zero per i vettori di lunghezza e stride. Il secondo costruttore archivia _StartIndex per l'indice iniziale, _LenArray per la matrice di lunghezza e _IncArray per la matrice di stride.

Osservazioni:

gslice definisce un subset di un oggetto valarray costituito da più sezioni dell'oggetto valarray che iniziano nello stesso elemento specificato. La possibilità di usare matrici per definire più sezioni è l'unica differenza tra gslice e slice::slice. La prima sezione ha un primo elemento con un indice di _StartIndex, un conteggio di elementi specificato dal primo elemento di _LenArraye uno stride specificato dal primo elemento di _IncArray. Nel successivo set di sezioni ortogonali i primi elementi vengono forniti dalla prima sezione. Il secondo elemento di _LenArray specifica il numero di elementi. Lo stride viene fornito dal secondo elemento di _IncArray. Una terza dimensione delle sezioni accetta gli elementi della matrice bidimensionale come elementi iniziali e continua in modo analogo.

Esempio

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

Trova i valori della matrice che specificano il numero di elementi in una sezione generale di un valarray.

valarray<size_t> size() const;

Valore restituito

Oggetto valarray che specifica il numero di elementi in ogni sezione di una sezione generale di un oggetto valarray.

Osservazioni:

La funzione membro restituisce le lunghezze archiviate delle sezioni.

Esempio

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

Trova l'indice iniziale di una sezione generale di un valarray.

size_t start() const;

Valore restituito

Indice iniziale di una sezione generale di un oggetto valarray.

Esempio

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

Trova la distanza tra gli elementi in una sezione generale di un valarray.

valarray<size_t> stride() const;

Valore restituito

Oggetto valarray che specifica le distanze tra gli elementi in ogni sezione di una sezione generale di un oggetto valarray.

Esempio

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

Vedi anche

Thread safety nella libreria standard C++