slice
类
valarray
的实用程序类,用于定义父级 valarray
的一维子集。 如果 valarray
被视为一个其所有元素都在一个数组中的二维矩阵,则 slice
会将一个维度中的向量从二维数组中提取出来。
备注
类用于存储确定类型 slice_array
对象的参数。 当类 slice
对象显示为类 valarray<Type>
的对象的参数时,将间接构造 valarray
的子集。 存储的值(用于指定从父级 valarray
选择的子集)包括:
valarray
中的起始索引。总长度或
slice
中的元素数目。跨距,或
valarray
中元素的索引之间的距离。
如果由 slice
定义的集为常量 valarray
的子集,则 slice
将是新的 valarray
。 如果由 slice
定义的集为非常量 valarray
的子集,则 slice
将具有对原始 valarray
的引用语义。 非常量 valarray
对象的评估机制节省了时间和内存。
仅当由 slice
对象定义的源和目标子集都是不重复的并且所有索引都是有效的,才可以保证对 valarray
对象的操作。
构造函数
构造函数 | 说明 |
---|---|
slice |
定义 valarray 的一个子集,它包含等距分隔的元素的集合,并且在指定的元素开始。 |
成员函数
成员函数 | 说明 |
---|---|
size |
查找 valarray 的 slice 中的元素数目。 |
start |
查找 valarray 的 slice 的起始索引。 |
stride |
查找 valarray 的 slice 中元素之间的距离。 |
要求
标头:<valarray>
命名空间:std
slice::size
查找 valarray
的 slice
中的元素数目。
size_t size() const;
返回值
valarray
的 slice
中的元素数。
示例
// 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
定义 valarray
的一个子集,它包含等距分隔的元素的集合,并且在指定的元素开始。
slice();
slice(
size_t _StartIndex,
size_t _Len,
size_t stride);
参数
_StartIndex
子集中第一个元素的 valarray
索引。
_Len
子集中的元素数。
stride
子集中元素间的距离。
返回值
默认构造函数对于起始索引、总长度和 stride 都存储为零。 第二个构造函数对于起始索引存储为 _StartIndex
,对于总长度存储为 _Len
,对于跨距存储为 stride
。
备注
stride
值可为负值。
示例
// 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
查找 valarray
的 slice
的起始索引。
size_t start() const;
返回值
valarray
的 slice
的起始索引。
示例
// 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
查找 valarray
的 slice
中元素之间的距离。
size_t stride() const;
返回值
valarray
的 slice
中元素间的距离。
示例
// 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.