Freigeben über


gslice-Klasse

Eine Hilfsklasse, die valarray verwendet wird, um multidimensionale Teilmengen einer .valarray Wenn eine valarray multidimensionale Matrix mit allen Elementen in einem Array betrachtet wird, extrahiert der gslice Vektor aus dem multidimensionalen Array.

Hinweise

Die Klasse speichert die Parameter, die ein Objekt vom Typ gslice_arraycharakterisieren. Die Teilmenge einer valarray Klasse wird indirekt konstruiert, wenn ein Objekt der Klasse gslice als Argument für ein Objekt der Klasse valarray<Type>angezeigt wird. Die gespeicherten Werte, die die aus dem übergeordneten Element valarray ausgewählte Teilmenge angeben, umfassen:

  • Einen Startindex.

  • Ein Längenvektor der Klasse valarray<size_t>.

  • Ein Stridevektor der Klasse valarray<size_t>.

Die beiden Vektoren müssen dieselbe Länge haben.

Wenn der durch eine gslice Konstante definierte Satz die Teilmenge einer Konstante valarrayist, ist dies gslice ein neues valarray. Wenn der von a gslice definierte Satz die Teilmenge eines nichtconstanten valarrayist, weist die gslice Referenzsemantik auf das Original valarrayauf. Der Auswertungsmechanismus für nicht zusammenhängende valarray Objekte spart Zeit und Arbeitsspeicher.

Vorgänge für valarray Objekte werden nur garantiert, wenn die durch die gslice Objekte definierten Quell- und Zieluntersätze eindeutig sind und alle Indizes gültig sind.

Konstruktoren

Konstruktor Beschreibung
gslice Definiert eine Teilmenge von valarray, die aus mehreren Segmenten von valarray besteht, die alle bei einem angegebenen Element beginnen.

Memberfunktionen

Memberfunktion Beschreibung
size Sucht die Arraywerte durch Angabe der Anzahl von Elementen in einem allgemeinen Segment von valarray.
start Sucht den Startindex eines allgemeinen Segments von valarray.
stride Sucht den Abstand zwischen Elementen in einem allgemeinen Segment von valarray.

Anforderungen

Header:<valarray>

Namespace: std

gslice::gslice

Eine Hilfsklasse, die valarray verwendet wird, um mehrdimensionale Segmente eines .valarray

gslice();

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

Parameter

_StartIndex
Der valarray Index des ersten Elements in der Teilmenge.

_LenArray
Eine valarray Angabe der Anzahl der Elemente in jedem gslice.

_IncArray
Eine valarray Angabe der Stride in jedem gslice.

Rückgabewert

Der Standardkonstruktor speichert 0 (null) für den Startindex und leere Vektoren für die Längen- und Sprungvektoren. Der zweite Konstruktor speichert _StartIndex für den Startindex, _LenArray für das Längenarray und _IncArray für das Sprungarray.

Hinweise

gslice definiert eine Teilmenge einer valarray , die aus mehreren Segmenten besteht, die valarray jeweils mit demselben angegebenen Element beginnen. Die Möglichkeit, Arrays zum Definieren mehrerer Segmente zu verwenden, ist der einzige Unterschied zwischen gslice und slice::slice. Das erste Segment verfügt über ein erstes Element mit einem Index von _StartIndex, einer Anzahl von Elementen, die durch das erste Element _LenArrayvon , und eine Stride durch das erste Element von _IncArray. Der erste Satz der orthogonalen Segmente hat erste Elemente, die durch das erste Segment angegeben wurden. Das zweite Element _LenArray gibt die Anzahl der Elemente an. Der Sprung wird durch das zweite Element _IncArray angegeben. Eine dritte Dimension von Segmenten würde die Elemente des zweidimensionalen Arrays als die Startelemente übernehmen und analog fortgesetzt.

Beispiel

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

Sucht die Arraywerte durch Angabe der Anzahl von Elementen in einem allgemeinen Segment von valarray.

valarray<size_t> size() const;

Rückgabewert

Eine valarray Angabe der Anzahl der Elemente in jedem Segment eines allgemeinen Segments eines .valarray

Hinweise

Die Memberfunktion gibt die gespeicherten Segmentlängen zurück.

Beispiel

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

Sucht den Startindex eines allgemeinen Segments von valarray.

size_t start() const;

Rückgabewert

Der Anfangsindex eines allgemeinen Segments eines .valarray

Beispiel

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

Sucht den Abstand zwischen Elementen in einem allgemeinen Segment von valarray.

valarray<size_t> stride() const;

Rückgabewert

A valarray specifying the distances between elements in each slice of a general slice of a valarray.

Beispiel

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

Siehe auch

Threadsicherheit in der C++-Standardbibliothek