通俗来讲,类valarray是经过优化的向量。类valarray是由4个用于描述valarray中各个部分的辅助类支持的。这4个类分别是:slice_array、gslice_array、mask_array和indirect_array。
其中slice_array、gslice_array、mask_array和indirect_array均用于存放临时数值或数据。
若要使用类valarray,则必须包含头文件<valarray>。本节主要讲述类valarray的构造函数、成员函数、超越函数、下标和赋值、二元运算和数学运算以及子集操作。其中,子集操作将在后面章节介绍。
1.类valarray的构造函数
类valarray的构造函数一般有以下几种形式:
构造类valarray的对象时,最简单的形式是:将元素的数量作为输入参数,即上述构造函数的第二种形式和第三种形式。第二种形式的参数size_tn用于指定数组的大小;第三种形式的参数n用于指定数组的大小,参数val用作所有元素的初始默认值。这和STL中容器的构造函数不同。容器构造函数的第一个参数多数用于指定容器的大小,第二个参数用于指定容器中元素的初始默认值。
利用构造函数的第三种形式可以使用已知数组对valarray对象进行初始化。
例如,
上述代码的执行结果为:
2.下标、赋值以及数学运算
类valarray还提供了一系列的下标操作[]、数学运算等。下标操作符[]使程序员可以方便地访问数组中的每个元素以及获取数值子集。类valarray还定义了所有普通数学运算,例如+、-、∗、模数、反相、位操作、位比较、逻辑操作、赋值操作等。数组的乘法运算是对应元素相乘,即
va1=va2∗va3
等同于
va1[0]=va2[0]∗va3[0];
val[1]=va2[1]∗va3[1];
…
若参与计算的数组容量不一致,则运算结果未有定义,即不进行计算。
3.成员函数
类valarray提供了一系列的成员函数size()、sum()、max()、min()、resize()、shift()、cshift()、apply()和free()。
1)size()函数。该函数用于获取数组的大小。
2)max()函数。该函数用于获取数组中的最大值。
3)min()函数。该函数用于获取数组中的最小值。
4)sum()函数。该函数用于获取数组中所有元素的总和。
5)resize()函数。该函数用于实现重新设置数组的大小。
6)shift()和cshift()函数。shift()函数用于实现逻辑移位,cshift()函数用于实现循环移位。移位即指将数组中的元素位置顺次移动。
7)apply()函数。其原型为:
其中fn(T)是指定的函数。apply()函数的功能是:使用fn()函数处理数组中的每个元素。
8)free()函数。其原型为:
free()函数用于删除数组的所有元素,并将数组长度设置为0。
例6-3
(www.xing528.com)
例6-3的执行效果如图6-3所示。
图6-3 例6-3的执行效果
提示
请读者认真读例题。例题中包含了作者精心安排的各种编程细节。
4.超越函数
类valarray可允许的超越函数包括abs()、pow()、exp()、sqrt()、log()、log10()、sin()、cos()、tan()、sinh()、cosh()、tanh()、asin()、acos()、atan()和atan2()。以上函数均返回一个新的valarray型数组,元素个数和该函数输入的数组大小相同。上述函数的功能是针对数组中的每个元素分别进行超越函数计算。其使用方法详见例6-4。
1)abs()函数。其原型为:
abs()函数的功能是对数组中的每个元素进行绝对值计算,获取每个元素的绝对值。
2)pow()函数。其原型为:
若要使用pow()函数,需要包含数学库头文件<cmath>。对于类valarray的对象(数组),pow()函数主要有上述三种形式。在Visual C++ 6.0环境中,本书作者仅编译通过了pow()函数的第一种形式。
3)exp()函数。其原型为:
若要使用exp()函数,同样需要包含头文件<cmath>。
4)sqrt()函数。其原型为:
若要使用sqrt()函数,同样需要包含头文件<cmath>。
5)log()和log10()函数。其原型为:
若要使用log()和log10()函数,同样需要包含头文件<cmath>。
6)三角函数。其原型为:
若要使用三角函数,同样需要包含头文件<cmath>。
上述三角函数中,atan2()函数有三种形式。本文作者在VisualC++6.0环境中,仅调试通过了第一种形式(黑体)。
上述超越函数的使用方法详见例6-4。
例6-4
例6-4的执行效果如图6-4所示。
图6-4 例6-4的执行效果
总结
本节讲述了数组类valarray的内容,主要涉及的内容包括数组的最基本使用、访问、基本操作以及超越函数。希望读者对照给出的源代码,认真阅读源代码,以熟练掌握类valarray。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。