次の方法で共有


gslice クラス

valarrayの多次元サブセットを定義するために使用するvalarrayユーティリティ クラス。 valarrayが配列内のすべての要素を含む多次元行列と見なされる場合、gsliceは多次元配列からベクターを抽出します。

解説

クラスには、 gslice_array型のオブジェクトを特徴付けするパラメーターが格納されます。 valarrayのサブセットは、クラス gsliceのオブジェクトがクラス valarray<Type>のオブジェクトの引数として表示される場合に間接的に構築されます。 親 valarray から選択したサブセットを指定する格納された値は次のとおりです。

  • 開始インデックス。

  • クラス valarray<size_t> の長さベクトル。

  • クラス valarray<size_t> のストライド ベクタトル。

これら 2 つのベクターは同じ長さにする必要があります。

gsliceによって定義されたセットが定数valarrayのサブセットである場合、gsliceは新しいvalarrayになります。 gsliceによって定義されたセットが非valarrayのサブセットである場合、gsliceには元のvalarrayへの参照セマンティクスがあります。 非 valarray オブジェクトの評価メカニズムにより、時間とメモリが節約されます。

valarray オブジェクトに対する操作は、gslice オブジェクトによって定義されたソースとターゲットのサブセットが異なり、すべてのインデックスが有効な場合にのみ保証されます。

コンストラクター

コンストラクター 説明
gslice すべて指定された要素で始まる、valarray の複数のスライスからなる valarray のサブセットを定義します。

メンバー関数

メンバー関数 説明
size valarray の一般的なスライスの要素数を指定する配列の値を検索します。
start valarray の一般的なスライスの開始インデックスを検索します。
stride valarray の一般的なスライスの要素間の距離を検索します。

要件

ヘッダー:<valarray>

名前空間: std

gslice::gslice

valarrayの多次元スライスを定義するために使用するvalarrayユーティリティ クラス。

gslice();

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

パラメーター

_StartIndex
サブセット内の最初の要素の valarray インデックス。

_LenArray
gslice内の要素の数を指定するvalarray

_IncArray
gsliceのストライドを指定するvalarray

戻り値

既定のコンストラクターは、開始インデックスに対してゼロを格納し、長さおよびストライド ベクターに対して長さゼロのベクターを格納します。 2 番目のコンストラクターは、開始インデックスに対して _StartIndex、長さの配列に対して _LenArray、ストライド配列に対して _IncArray を格納します。

解説

gsliceは、それぞれが同じ指定された要素から開始するvalarrayの複数のスライスで構成されるvalarrayのサブセットを定義します。 配列を使用して複数のスライスを定義する機能は、 gsliceslice::sliceの唯一の違いです。 最初のスライスには、 _StartIndexのインデックスを持つ最初の要素、 _LenArrayの最初の要素で指定された要素の数、および _IncArrayの最初の要素によって指定されたストライドがあります。 次の一連の直交スライスのセットには、最初のスライスで指定された最初の要素が含まれます。 _LenArray の 2 番目の要素は、要素の数を指定します。 ストライドは、_IncArray の 2 番目の要素によって指定されます。 スライスの 3 次元は、2 次元配列の要素を開始要素として受け取り、同様に続行します。

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

valarray の一般的なスライスの要素数を指定する配列の値を検索します。

valarray<size_t> size() const;

戻り値

valarrayの一般的なスライスの各スライス内の要素の数を指定するvalarray

解説

このメンバー関数は、格納されているスライスの長さを返します。

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

valarray の一般的なスライスの開始インデックスを検索します。

size_t start() const;

戻り値

valarrayの一般的なスライスの開始インデックス。

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

valarray の一般的なスライスの要素間の距離を検索します。

valarray<size_t> stride() const;

戻り値

valarrayの一般的なスライスの各スライス内の要素間の距離を指定するvalarray

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

関連項目

C++ 標準ライブラリのスレッド セーフ