C++ primer plus 第16章string 类和标准模板库, vector、valarray和array

C++ primer plus 第16章string 类和标准模板库, vector、valarray和array

C++ primer plus 第16章string 类和标准模板库, vector、valarray和array


16.7 其他库

C++还提供了其他一些类库,它们比本章讨论前面的例子更为专用。例如,头文件complex为复数提供了类模板 complex,包含用于 foat、long和 long double 的具体化。这个类提供了标准的复数运算及能够
处理复数的标准函数。C++11新增的头文件random 提供了更多的随机数功能。第 14章介绍了头文件 valarray 提供的模板类 valarray。这个类模板被设计成用于表示数值数组,支持各种数值数组操作,例如将两个数组的内容相加、对数组的每个元素应用数学函数以及对数组进行线性代数运算。

16.7.1 vector、valarray和array

您可能会问,C++为何提供三个数组模板:vector、valarray和array。这些类是由不同的小组开发的,用于不同的目的。vector模板类是一个容器类和算法系统的一部分,它支持面向容器的操作,如排序、插入、重新排列、搜索、将数据转移到其他容器中等。而 valarray 类模板是面向数值计算的,不是STL的一部分。例如,它没有 push back()和 insert()方法,但为很多数学运算提供了一个简单、直观的接口。最后array 是为替代内置数组而设计的,它通过提供更好、更安全的接口,让数组更紧凑,效率更高。Aray表示长度固定的数组,因此不支持push back()和inser(),但提供了多个STL方法,包括 begin()、end()、rbegin()和 rend(),这使得很容易将 STL 算法用于 array 对象。例如,假设有如下声明:

vector<double>vedl(10)ved2(10)ved3(10);
array<double,10>vodl,vod2,vod3;
valarray<double>vad1(10),vad2(10),vad3(10);

同时,假设 ved1、ved2、vod1、vod2、vadl和 vad2 都有合适的值。要将两个数组中第一个元素的和赋给第三个数组的第一个元素,使用vector 类时,可以这样做:

transform(ved1.begin(),ved1.end(),ved2.begin(),ved3.begin(),
	plus<double>());

对于 array 类,也可以这样做:

transform(vod1.begin(),vod1.end(),vod2.begin(),vod3 .begin()
		plus<double>());

然而,valarray类重载了所有算术运算符,使其能够用于valarray 对象,因此您可以这样做:

vad3 = vadl + vad2;//+ overloaded

同样,下面的语句将使 vad3 中每个元素都是vad1和 vad2 中相应元素的乘积:vad3 = vadl * vad2;//*overloaded要将数组中每个元素的值扩大2.5倍,STL方法如下:

transform(ved3.begin(),ved3.end(),ved3 .begin()bind1st(multiplies<double
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值