Partager via


Classe slice

Classe utilitaire utilisée valarray pour définir des sous-ensembles unidimensionnels d’un parent valarray. Si une valarray matrice à deux dimensions est considérée comme une matrice à deux dimensions avec tous les éléments d’un tableau, elle slice extrait un vecteur dans une dimension hors du tableau à deux dimensions.

Notes

La classe stocke les paramètres qui caractérisent un objet de type slice_array. Le sous-ensemble d’un valarray objet est indirectement construit lorsqu’un objet de classe slice 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 :

  • Index de départ dans le valarray.

  • Longueur totale ou nombre d’éléments dans le slice.

  • Une progression, ou une distance entre les indices des éléments dans le valarray.

Si l’ensemble défini par un slice est le sous-ensemble d’une constante valarray, il slice s’agit d’un nouveau valarray. Si l’ensemble défini par un slice est le sous-ensemble d’un élément nonconstant valarray, la slice 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 slice objets sont distincts et que tous les index sont valides.

Constructeurs

Constructeur Description
slice Définit un sous-ensemble d’un valarray élément constitué d’une collection d’éléments qui sont à distance égale et qui commencent à un élément spécifié.

Fonctions Membre

Fonction membre Description
size Recherche le nombre d’éléments d’un slice valarray.
start Recherche l’index de départ d’un slice valarrayobjet .
stride Recherche la distance entre les éléments d’un slice valarray.

Spécifications

Header :<valarray>

Espace de noms : std

slice::size

Recherche le nombre d’éléments d’un slice valarray.

size_t size() const;

Valeur retournée

Nombre d’éléments d’un slice valarray.

Exemple

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

Définit un sous-ensemble d’un valarray élément constitué d’une collection d’éléments qui sont à distance égale et qui commencent à un élément spécifié.

slice();

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

Paramètres

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

_Len
Nombre d’éléments dans le sous-ensemble.

stride
Distance entre les éléments dans le sous-ensemble.

Valeur retournée

Le constructeur par défaut stocke des zéros pour l’index de départ, la longueur totale et le stride. Le deuxième constructeur stocke _StartIndex pour l’index de départ, _Len pour la longueur totale et stride pour le stride.

Notes

La stride valeur peut être négative.

Exemple

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

Recherche l’index de départ d’un slice valarrayobjet .

size_t start() const;

Valeur retournée

Index de départ d’un slice valarray.

Exemple

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

Recherche la distance entre les éléments d’un slice valarray.

size_t stride() const;

Valeur retournée

Distance entre les éléments d’un slice valarray.

Exemple

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

Voir aussi

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