valarray
的实用程序类,用于定义 valarray
的多维子集。 如果将 valarray
视为具有数组中所有元素的多维矩阵,则 gslice
从多维数组中提取一个向量。
备注
类用于存储确定类型 gslice_array
对象的参数。 当类 gslice
对象显示为类 valarray<Type>
的对象的参数时,将间接构造 valarray
的子集。 存储的值(用于指定从父级 valarray
选择的子集)包括:
一个起始索引。
类
valarray<size_t>
的长度矢量。类
valarray<size_t>
的跨距矢量。
两个矢量必须具有相同长度。
如果由 gslice
定义的集为常量 valarray
的子集,则 gslice
将是新的 valarray
。 如果由 gslice
定义的集为非常量 valarray
的子集,则 gslice
将具有对原始 valarray
的引用语义。 非常量 valarray
对象的评估机制节省了时间和内存。
仅当由 gslice
对象定义的源和目标子集都是不重复的并且所有索引都是有效的,才可以保证对 valarray
对象的操作。
构造函数
构造函数 | 说明 |
---|---|
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
。
返回值
默认构造函数对起始索引存储零,对于长度和跨距向量存储长度为零的向量。 第二个构造函数对于起始索引存储 _StartIndex
,对于长度数组存储 _LenArray
,对于跨距数组存储 _IncArray
。
备注
gslice
定义 valarray
的子集,该子集由 valarray
的多个切分组成,每个切分都从相同的指定元素开始。 gslice
和 slice::slice
之间的唯一差别在于使用数组定义多个切分的能力。 第一个切分具有一个带有 _StartIndex
的索引的第一个元素、由 _LenArray
的第一个元素指定的元素数和由 _IncArray
的第一个元素提供的跨距。 下一个正交切分集具有由第一个切分指定的第一个元素。 _LenArray
的第二个元素指定元素数。 跨距由 _IncArray
的第二个元素指定。 第三个维度的切分会将二维数组的元素视为起始元素,以此类推。
示例
// 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 ).