前言
上一期我们介绍了,用algorithm库函数实现排序,查找,本次再介绍一些简单操作。
include<algorithm>;
零、数组的书写
函数既然操作数组,总会有一个“操作范围”,手写函数用计数器处理,而algorithm库函数则传递参数,更加简洁。
1.如果是一般定义,int a[n]之类,那么我们在输入“操作范围”的时候,对函数形式参数,直接传递地址(a(表示首地址),a+8(表示a[8]的元素地址))
2.如果使用了<array>头文件,则用a.begin(),a.end(),等成员书写。
一、元素操作(copy,replace,remove)
1.copy(,,)
copy函数是把某个数组的全部或者一部分(这取决于函数的前两个参数,他们决定被复制对象的起始位置),放到另一个数组中,就是一个复制粘贴的过程。
copy(a.begin(),a.end(),b.begin());就是把a整个复制到b中。
copy(a,a+7,b);就是把a数组的前7位传给b数组。
2.replace(,, ,)
replace函数是将数组的某一段(这也取决于前两个参数,书写方式不再赘述)中所有某一指定元素替换为另一元素。就像Word文档里,检索一个多次出现的错别字,并且将他们全部替换的过程)其中待替换的元素的值为第三个参数,替入者为第四个参数。
例子:replace(a.begin(),a.end(),1,10)把a中所有的1,换成10。
3.remove(,,)
remove有三个参数,前两个是操作范围,第三个是待删除的关键字。
remove这个函数的功能是模拟查找一个关键字,并把数组中所有的值与该关键字相等的元素删除
为什么说是模拟?因为实际上,这个函数只是改变了“链接顺序”,让被删除元素的前后无缝衔接,通过原先的访问方式不能再获取已被删除的值,但是,这个数组的内存没有改变。
举个例子:
#include<algorithm>
using namespace std;
int main()
{
int a[9];
remove(a,a+9,20);
return 0;
}(所有的输入输出都被删除了,可以自行添加)
运行结果:
我们修改原数组,再把它输出,结果发现,20虽然被删除了,其实后面3位的内存空间没有动 ,只是把原来20的空间硬生生用后三位填满了。
二、最大值和最小值查找
这一部分有六个函数(min,max,minmax,min-element,max-element,minmax-element)
前三个负责比较数值大小,或者一个确定的数组,后三个则检索一个数组(以参数形式传递,并且获得最大或最小值)。
现介绍max,与minmax-element的用法
1.max(,)
max的两个参数都必须是同类型数据(你只能int比int,float比float),然后自身返回一个较大值,你可以把这个函数写在任何可以书写常量或变量的位置。
2.minmax-element(,)
这个函数的两个参数也是用来确定检索范围的,这里不再赘述。
但是,由于minmax的输出是两个数,其实它的结果存入了一个struct的两个成员中,first和second两个指针分别指向他们,前者为min,后者为max。实例如下:
这样就会分别输出1和54。
三、顺序变换操作(adverse,rotate,random-shuffle)
adverse已经在上一篇讲过。现在介绍rotate和random-shuffle。
1.rotate(,,)
rotate有三个参数,首地址,中间某个元素的地址,尾地址。
官网的定义是这样的:
Rotates the order of the elements in the range [first,last)
, in such a way that the element pointed by middle becomes the new first element.
也就是说从中间那个元素开始,后方元素向前移动,而前方元素移动到后方。
比如(a,a+2,a+5)就会把{1,2,3,4,5},变成{3,4,5,1,2}。
2.random-shuffle(,)
他的两个参数是操作范围;
这个函数配合<ctime>库,用srand<time(0)>进行初始化种子,就可以实现随机排序一个数组。
比如说代码:
两次实现结果:
the end
参考资料:www.cplusplus.com
活动地址:优快云21天学习挑战赛