C++学习之库函数<algorithgm>(2)

来源:互联网 发布:手机淘宝开店不成功 编辑:程序博客网 时间:2024/06/07 13:03
<algorithm>算法库



find返回第一个值等价于给定值的元素
函数:find(first,last,val)

解释:first:指向序列的初始地址。
           last:指向序列的末地址,但不包括last指向的元素。
           val:需要查找的值。

返回:指向在范围[first,last)中与val等值的第一个元素的地址。如果不存在,则返回last

实例1:
#include<iostream>#include<algorithm>using namespace std;int main(){int a[]={2,2,6,3,1};cout<<find(a,a+5,6)-a+1<<endl;return 0;}/*运行结果:3*/
实例2:
#include<iostream>#include<algorithm>using namespace std;int main(){int a[]={2,2,6,3,1};cout<<find(a,a+5,5)-a+1<<endl;//查找5,不存在返回出界return 0;}/*运行结果:6*/



find_if查找范围 A 中与范围 B 等价的子范围最后出现的位置
函数:find_if(first,last,pred)

解释:first:指向序列的初始地址。
           last:指向序列的末地址,但不包括last指向的元素。
           pred:一元谓词函数,以范围的一个元素为参数,然后返回一个可转换成bool类型的值。

返回:指向在范围[first,last)中使谓词函数反悔true的第一个元素的地址。如果不存在,则返回last

实例1:
#include<iostream>#include<algorithm>using namespace std;int pred(int a){return a>5;}int main(){int a[]={2,2,6,3,1};cout<<*find_if(a,a+5,pred)<<endl;return 0;}/*运行结果:6*/
实例2:
#include<iostream>#include<algorithm>using namespace std;int pred(int a){return a<2;}int main(){int a[]={2,2,6,3,1};cout<<find_if(a,a+5,pred)-a+1<<endl;//返回小于2的第一个元素的位置return 0;}/*运行结果:5*/




search在范围 A 中查找第一个与范围 B 等价的子范围的位置
函数:search(first1,last1,first2,Binary)

解释:first1:指向序列1的初始地址。
           last1:指向序列1的末地址,但不包括last指向的元素。
           first2:指向序列2的初始地址。
           last2:指向序列2的末地址,但不包括last指向的元素。
           Binary:二元谓词函数,以范围的两个元素为参数,然后返回一个可转换成bool类型的值。

返回:返回指向序列[first2,last2)在序列[first1,last1)第一次出现位置处的第一个元素的地址。

实例1:
#include<iostream>#include<algorithm>using namespace std;int pred(int a,int b){return a==b;}int main(){int a[]={2,2,6,3,1};int b[]={6,3,1};cout<<search(a,a+5,b,b+3,pred)-a+1<<endl;return 0;}/*运行结果:3*/
实例2:
#include<iostream>#include<algorithm>using namespace std;int pred(int a,int b){return a<b;}int main(){int a[]={2,2,6,3,1};int b[]={6,3};cout<<search(a,a+5,b,b+3,pred)-a+1<<endl;return 0;}/*运行结果:6*/



copy将一个范围中的元素拷贝到新的位置处
函数:copy(first1,last1,first2)

解释:first1:指向序列1的初始地址。
           last1:指向序列1的末地址,但不包括last指向的元素。
           first2:指向序列2的初始地址。

实例1:
#include<iostream>#include<algorithm>using namespace std;int main(){int a[]={2,2,6,3,1};int b[10];copy(a,a+5,b);for(int i=0;i<5;i++)cout<<b[i]<<' ';return 0;}/*运行结果:2 2 6 3 1*/

原创粉丝点击