STL查找、排序、替换、集合算法
1、STL查找算法
(1)、代码如下:
#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;//查找算法!!!voidmain_adjacent_find(){vector<int>v1;v1.push_back(1);v1.push_back(2);v1.push_back(2);v1.push_back(3);v1.push_back(5);//查找第一个元素重复的位置;vector<int>::iteratorit;it=adjacent_find(v1.begin(),v1.end());//查找第一个重复出现的数字;if(it==v1.end()){cout<<"没有找到重复的元素"<<endl;}else{cout<<*it<<endl;}intindex=distance(v1.begin(),it);//从头开始,的知当前迭代器的指针所在的数组下标处;cout<<"index:"<<index<<endl;}voidmain_binary_search(){vector<int>v1;//012345.......n-1//二分法,10次就可以找到了;v1.push_back(1);v1.push_back(3);v1.push_back(5);v1.push_back(7);v1.push_back(9);boolb=binary_search(v1.begin(),v1.end(),7);if(b==true){cout<<"找到了"<<endl;}else{cout<<"没找到"<<endl;}}voidmain_count(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);v1.push_back(7);v1.push_back(7);v1.push_back(9);v1.push_back(7);intnum=count(v1.begin(),v1.end(),7);cout<<"num:"<<num<<endl;}boolGreatThree(intnum){if(num>3){returntrue;}returnfalse;}voidmain_count_if(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);v1.push_back(7);v1.push_back(9);intnum=count_if(v1.begin(),v1.end(),GreatThree);cout<<"num:"<<num<<endl;}voidmain_find(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);v1.push_back(7);v1.push_back(9);vector<int>::iteratorit;it=find(v1.begin(),v1.end(),5);cout<<*it<<endl;}voidmain_find_if(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);v1.push_back(7);v1.push_back(9);vector<int>::iteratorit;it=find_if(v1.begin(),v1.end(),GreatThree);//返回的是第一个回调函数所指向的迭代器;cout<<*it<<endl;}intmain(void){main_adjacent_find();//查找第一个重复的元素;main_binary_search();//二分法查找某一个元素;main_count();//查找某一个元素出现的次数;针对基础数据类型main_count_if();//用一个一元谓词,可以查找大于某一个数字的个数;针对自定义的数据类型main_find();//查找某一数据,通过迭代器指出;针对基础数据类型main_find_if();//查找某一数据,通过迭代器指出;针对自定义数据类型;return0;}
(2)、运行结果:
2、STL排序算法
(1)、代码如下:
#include<iostream>#include<string>#include<vector>#include<algorithm>#include<functional>usingnamespacestd;//排序算法voidprintV(vector<int>&v){vector<int>::iteratorit;for(it=v.begin();it!=v.end();it++){cout<<*it<<"";}cout<<endl;}voidmain_merge(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);vector<int>v2;v2.push_back(2);v2.push_back(4);v2.push_back(6);vector<int>v3;v3.resize(v1.size()+v2.size());merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());printV(v3);}classStudent{public:Student(stringname,intid){m_name=name;m_id=id;}public:stringm_name;intm_id;};boolCompare(Students1,Students2){return(s1.m_id<s2.m_id);}voidmain_sort(){Students1("老大",1);Students2("老二",2);Students3("老三",3);Students4("老四",4);vector<Student>v1;v1.push_back(s4);v1.push_back(s1);v1.push_back(s3);v1.push_back(s2);vector<Student>::iteratorit;for(it=v1.begin();it!=v1.end();it++){cout<<it->m_id<<"\t"<<it->m_name<<endl;}//sort()要对自定义的数据类型进行排序,就的进行自定义数据类型的排序;sort(v1.begin(),v1.end(),Compare);//Compare就是谓词,谓词就是函数名称,返回值为bool类型;for(it=v1.begin();it!=v1.end();it++){cout<<it->m_id<<"\t"<<it->m_name<<endl;}}voidmain_random_shuffle(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);v1.push_back(7);//对动态数组进行随机打乱random_shuffle(v1.begin(),v1.end());printV(v1);//对字符串随机的打乱顺序;stringstr="abcdefg";random_shuffle(str.begin(),str.end());;cout<<"str:"<<str<<endl;}voidmain_reverse(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);v1.push_back(7);reverse(v1.begin(),v1.end());printV(v1);}intmain(void){main_merge();//归并排序main_sort();main_random_shuffle();main_reverse();return0;}
(2)、运行结果:
3、STL拷贝替换
(1)、代码如下:
#include<iostream>#include<numeric>//accumulate()函数的头文件;#include<vector>#include<algorithm>#include<functional>usingnamespacestd;//拷贝替换voidprintV(vector<int>&v){vector<int>::iteratorit;for(it=v.begin();it!=v.end();it++){cout<<*it<<"";}cout<<endl;}voidmain_copy(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);vector<int>v2;v2.resize(v1.size());//调整容器大小的函数;copy(v1.begin(),v1.end(),v2.begin());//拷贝容器函数;printV(v2);}voidmain_replace(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(3);v1.push_back(3);v1.push_back(5);replace(v1.begin(),v1.end(),3,8);//替换函数,将前面的数据都用后面的数据替换;printV(v1);}boolgreat_equal(int&n){if(n>=5){returntrue;}else{returnfalse;}}voidmain_replace_if(){vector<int>v1;v1.push_back(1);v1.push_back(8);v1.push_back(8);v1.push_back(8);v1.push_back(5);replace_if(v1.begin(),v1.end(),great_equal,1);//这里就是可以替换范围内的数据,通过谓词进行控>制!!,将great_equal范围内的数字(返回值为真的)进行替换!!!printV(v1);}voidmain_swap(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);vector<int>v2;v2.push_back(2);v2.push_back(4);v2.push_back(6);swap(v1,v2);//交换了v1、v2容器中的内容!!!printV(v1);}voidmain_accumulate(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);inttmp=accumulate(v1.begin(),v1.end(),100);//求和函数,加上一个初始值100;cout<<tmp<<endl;}voidmain_fill(){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);fill(v1.begin(),v1.end(),8);//将容器中的数值全都改为8;printV(v1);}intmain(void){main_copy();//拷贝main_replace();//替换基础数据类型main_replace_if();//替换范围自定义数据类型main_swap();//交换容器中的内容main_accumulate();//求和函数main_fill();return0;}
(2)、运行结果:
4、STL集合算法
(1)、代码如下:
#include<iostream>#include<algorithm>#include<functional>#include<vector>usingnamespacestd;voidprintV(vector<int>&v){vector<int>::iteratorit;for(it=v.begin();it!=v.end();it++){cout<<*it<<"";}cout<<endl;}//集合intmain(void){vector<int>v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);vector<int>v2;v2.push_back(1);v2.push_back(1);v2.push_back(1);vector<int>v3;v3.resize(v1.size()+v2.size());set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());//集合中取并集;没有填满的空间默,认为0;printV(v3);return0;}
(2)、运行结果:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。