Partager via


Classe gslice

Classe utilitaire utilisée valarray pour définir des sous-ensembles multidimensionnels d’un valarray. Si une valarray matrice multidimensionnelle est considérée comme une matrice multidimensionnelle avec tous les éléments d’un tableau, elle gslice extrait un vecteur à partir du tableau multidimensionnel.

Notes

La classe stocke les paramètres qui caractérisent un objet de type gslice_array. Le sous-ensemble d’un valarray objet est indirectement construit lorsqu’un objet de classe gslice apparaît comme un argument pour un objet de classe valarray<Type>. Les valeurs stockées qui spécifient le sous-ensemble sélectionné à partir du parent valarray sont les suivantes :

  • un index de départ ;

  • Vecteur de longueur de classe valarray<size_t>.

  • Vecteur de progression de classe valarray<size_t>.

Les deux vecteurs doivent avoir la même longueur.

Si l’ensemble défini par un gslice est le sous-ensemble d’une constante valarray, il gslice s’agit d’un nouveau valarray. Si l’ensemble défini par un gslice est le sous-ensemble d’un élément nonconstant valarray, la gslice sémantique de référence est définie sur l’original valarray. Le mécanisme d’évaluation des objets nonconstants valarray permet de gagner du temps et de la mémoire.

Les opérations sur valarray les objets sont garanties uniquement si les sous-ensembles source et de destination définis par les gslice objets sont distincts et que tous les index sont valides.

Constructeurs

Constructeur Description
gslice Définit un sous-ensemble d'un valarray composé de plusieurs sections du valarray qui commencent toutes à un élément spécifié.

Fonctions Membre

Fonction membre Description
size Recherche les valeurs de tableau spécifiant le nombre d'éléments dans un secteur général d'un valarray.
start Recherche l'index de départ d'un secteur général d'un valarray.
stride Recherche la distance entre des éléments dans un secteur général d'un valarray.

Spécifications

Header :<valarray>

Espace de noms : std

gslice::gslice

Classe utilitaire utilisée valarray pour définir des tranches multidimensionnelles d’un valarray.

gslice();

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

Paramètres

_StartIndex
Index valarray du premier élément du sous-ensemble.

_LenArray
Spécification valarray du nombre d’éléments dans chaque gslice.

_IncArray
Spécification valarray de la progression dans chaque gslice.

Valeur retournée

Le constructeur par défaut stocke zéro pour l’index de départ et les vecteurs de longueur nulle pour les vecteurs de longueur et stride. Le deuxième constructeur stocke _StartIndex pour l’index de départ, _LenArray pour le tableau de longueur et _IncArray pour le tableau stride.

Notes

gslice définit un sous-ensemble d’un valarray qui se compose de plusieurs tranches du valarray point de départ à l’élément spécifié. La possibilité d’utiliser des tableaux pour définir plusieurs tranches est la seule différence entre gslice et slice::slice. La première tranche a un premier élément avec un index de _StartIndex, un nombre d’éléments spécifié par le premier élément de _LenArray, et un pas donné par le premier élément de _IncArray. L’ensemble de sections orthogonales suivant a ses premiers éléments donnés par la première section. Le deuxième élément de _LenArray spécifie le nombre d’éléments. Le stride est fourni par le deuxième élément de _IncArray. Une troisième dimension de tranches prendrait les éléments du tableau à deux dimensions comme éléments de départ et continuer de façon analogue.

Exemple

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

Recherche les valeurs de tableau spécifiant le nombre d'éléments dans un secteur général d'un valarray.

valarray<size_t> size() const;

Valeur retournée

Spécification valarray du nombre d’éléments dans chaque tranche d’une tranche générale d’un valarray.

Notes

La fonction membre retourne les longueurs de sections stockées.

Exemple

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

Recherche l'index de départ d'un secteur général d'un valarray.

size_t start() const;

Valeur retournée

Index de départ d’une tranche générale d’un valarray.

Exemple

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

Recherche la distance entre des éléments dans un secteur général d'un valarray.

valarray<size_t> stride() const;

Valeur retournée

Spécification valarray des distances entre les éléments dans chaque tranche d’une tranche générale d’un valarray.

Exemple

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

Voir aussi

Sécurité des threads dans la bibliothèque standard C++