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_array
charakterisieren. 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 valarray
ist, ist dies gslice
ein neues valarray
. Wenn der von a gslice
definierte Satz die Teilmenge eines nichtconstanten valarray
ist, weist die gslice
Referenzsemantik auf das Original valarray
auf. 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 _LenArray
von , 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 ).