概述
stl的算法简单概念
算法(algorithm)是用模板技术实现的适用于各种容器的通用程序。算法常常通过迭代器间接地操作容器元素,而且通常会返回迭代器作为算法运算的结果。
STL大约提供了70个算法,每个算法都是一个模板函数或者一组模板函数,能够在许多不同类型的容器上进行操作,各个容器则可能包含着不同类型的数据元素。STL中的算法覆盖了在容器上实施的各种常见操作,如遍历、排序、检索、插入及删除元素等操作
1、find/count算法
find用于查找指定数据在某个区间中是否存在,该函数返回等于指定值的第一个元素位置,如果没有找到就返回最后元素位置;count用于统计某个值在指定区间出现的次数,
其用法如下:
find(beg,end,value)//[beg, end]是指定的区间,常用迭代器位置描述该区间,value是要查找或统计的值。
count(beg,end,value)
运用实例:
int arr[]={100,200,300,400,500,500,600,700,800,900,1000};
int *ptr;
ptr=find(arr,arr+9,400); //查找400在arr数组中的地址
cout<<"数据在数组中的下标是:" <<ptr-arr<<endl; //find返回地址,
list<int> L1; //定义链表L1
int a1[]={30,40,50,60,60,60,80};
for(int i=0;i<7;i++)
L1.push_back(a1[i]); //将a1数组加入到L1链表中
list<int>::iterator pos;
pos=find(L1.begin(),L1.end(),80);
if(pos!=L1.end())
cout<<"L1链表中存在数据元素:“<<*pos; //输出找到的数据
cout<<",它是链表中的第:“ <<distance(L1.begin(),pos)+1<<"个节点!"<<endl; //distance计算迭代器与链首元素间隔的元素个数
int n1=count(arr,arr+10,500); //统计arr数组中500的个数
int n2=count(L1.begin(),L1.end(),60);//统计L1链表中60的个数
cout<<"arr 数组中有:"<<n1<<"个"<<500<<endl;
cout<<"L1链表中有:"<<n2<<"个"<<60<<endl;
}
2、search算法
search算法则是从一个容器查找由另一个容器所指定的顺序值。
search用法形式如下:
search(beg1,end1,beg2,end2)
search将在[beg1, end1]区间内查找有无与[beg2, end2]相同的子区间,如果找到就返回[beg1, end1]内第一个相同元素的位置,如果没找到,返回end1; search将在[beg1, end1]区间内查找有无与[beg2, end2]相同的子区间,如果找到就返回[beg1, end1]内第一个相同元素的位置,如果没找到,返回end1
应用实例:
int a1[]={10,20,30,40,50,60,70,80};
int a2[]={40,50,60};
int *ptr;
ptr=search(a1,a1+8,a2,a2+3); //查找a2数组在a1中的位置
if(ptr==a1+8)
cout<<"no match foundn";
else
cout<<"a2 match a1 at:"<<(ptr-a1)<<endl; //输出第一个匹配元素的位置
vector<int> v;
list<int> L;
for(int i=0;i<8;i++)
v.push_back(a1[i]); //将a1数组插入v向量
for(int j=0;j<3;j++)
L.push_back(a2[j]); //将a2数组插入L链表
vector<int>::iterator pos;
pos=search(v.begin(),v.end(),L.begin(),L.end());
//在v中查找L
cout<<distance(v.begin(),pos)<<endl;
//distance计算找到元素在V中的下标
3、merge算法
merge可对两容器进行合并,将结果存放在第3个容器中,
其用法如下:
merge(beg1,end1,beg2,end2,dest)
merge将[beg1, end1]与[beg2, end2]区间合并,把结果存放在dest容器中。如果参与合并的两个容器中的元素是有序的,则合并的结果也是有序的。
应用实例:
int a2[]={40,50,60};
int a[10];
merge(a1,a1+7,a2,a2+3,a);//将a1、a2合并,结果放在a数组中
for(int i=0;i<10;i++)
cout<<a[i]<<"t";
cout<<endl;
list<int> L1,L2;
list<int>::iterator pos; //pos迭代器用于输出链表元素
for(i=0;i<7;i++)
L1.push_back(a1[i]); //插入L1的链表元素
for(int j=0;j<3;j++)
L2.push_back(a2[j]); //插入L2的链表元素
L1.merge(L2); //用list的merge成员合并L1、L2
for(pos=L1.begin();pos!=L1.end();pos++) //用迭代器pos输出合并后的L1
cout<<*pos<<"t";
cout<<endl;
最后
以上就是清爽发卡为你收集整理的stl常用算法总结的全部内容,希望文章能够帮你解决stl常用算法总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复