complex
complex头文件为复数提供了一个complex类模板,专用于float、long和long double 。这个类提供了标准的复数运算及能够处理复数的标准函数。
valarray
valarray类模板是面向数值计算的,它在头文件valarray中声明。
#include<valarray>
valarray<double> vad1(10),vad2(10),vad3(10);
该类重载了所有算术操作符,例如:
vad3 = vad1 + vad2; // + overloaded
vad3 = vad1 * vad2; // * overloaded
vad3 = 2.5 * vad3; // * overloaded
vad3 *= 2.5; // *= overloaded
该类还重载了数学函数,使之接受一个valarray参数,并返回一个valarray对象,例如:
vad3 = log(vad1); // log() overloaded
也可以使用apply()方法,该方法也适用于非重载函数:
vad3 = vad1.apply(log);
该方法不修改调用对象,而是返回一个包含结果的新对象。
valarray类还提供了:
sum()方法,计算valarray对象中所有元素的和。
size()方法,返回元素数。
max()方法,返回最大的元素值。
min()方法,返回最小的元素值。
resize()方法,重新设置valarray数组大小,并对其进行初始化。
shift()方法,将valarray数组移动,参数为正者左移,为负者右移,移动后由0填充剩余位。
cshift()方法,将valarray数组的数据进行循环移动,参数为正者左移为负就右移。
由于valarray类不支持超尾特性,所以应避免将其使用在STL接口上。
valarray类其他特性
假设numbers是一个valarray<double>对象,则下面的语句将创建一个bool值数组,其中vbool[i]被设置为numbers[i] > 9 的值,即true或false。
valarray<bool> vbool = numbers > 9 ;
slice
slice类对象可用作数组索引,在这种情况下,它代表的不是一个值而是一组值。slice对象被初始化为三个整数值:起始索引、索引数和跨距。
起始索引是第一个被选中的元素的索引;
索引数指出要选择多少个元素;
跨距表示元素之间的间隔。
例如,slice(1,4,3)创建的对象表示选择4个元素,它们的索引分别是1、4、7和10。也就是说,从起始索引开始,加上跨距得到下一个元素的索引,依此类推,直到选择了4个元素。
如果varint是一个valarray<int>对象,则下面的语句将把第1、4、7、10个元素都设置为10:
varint[slice(1,4,3)] = 10; // set selected elements to 10
这种特殊的下标指定功能让其能够使用一个一维valarray对象来表示二维数据。
例如,假设要表示一个4行3列的数组,可以将信息存储在一个包含12个元素的valarray对象中,然后使用一个slice(0,3,1)对象作为下标,来表示元素0、1和2,即第一行。同样,下标slice(0,4,3)表示元素0、3、6和9,即第一列。
gslice
gslice类可以表示多维下标。
详细介绍可查看
http://www.cplusplus.com/reference/std/valarray/gslice/