`
java-mans
  • 浏览: 11422890 次
文章分类
社区版块
存档分类
最新评论

algorithm算法初窥

 
阅读更多

其实algorithm里面的算法很多都类似的,参数基本都是一对迭代器或指针,和一个额外的参数。

如:find函数

#include<iostream>
#include<string>
#include<list>
#include<algorithm>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8};
list<int>l(a,a+8);
list<int>::iterator iter=find(l.begin(),l.end(),5);
if(iter!=l.end()){
cout<<"I have found it"<<endl;
}else{
cout<<"I can't find it"<<endl;
}
system("pause");
return 0;
}

又如count函数,

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main(){
int a;
vector<int>v;
cout<<"please input some ints"<<endl;
while(cin>>a){
v.push_back(a);
}
cout<<"then input the data which you want to count:"<<endl;
int tongji;
int geshu;
cin.clear();
cin>>tongji;
geshu=count(v.begin(),v.end(),tongji);
cout<<"total number:"<<geshu<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<numeric>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
int sum=accumulate(v.begin(),v.end(),0);
cout<<"accumulate(v.begin(),v.end(),0)="<<sum<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<string>
#include<vector>
#include<numeric>
using namespace std;
int main(){
string s[]={"hello"," my","name","is"," X"," X"," X"," X","Z","Z"};
vector<string>v(s,s+sizeof(s)/sizeof(*s));
string sum=accumulate(v.begin(),v.end(),string(""));
cout<<sum<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
string s1[]={"1","2","3","4","5","6","7","8"};
string s2[]={"a","b","c","d","e","f","g","1","2","3"};
vector<string>v1(s1,s1+8);
vector<string>v2(s2,s2+10);

vector<string>::iterator it=v1.begin();
int cnt=0;
while((it=find_first_of(it,v1.end(),v2.begin(),v2.end()))!=v1.end()){
++cnt;
++it;
}
cout<<"found "<<cnt<<" names on both v"<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool isShorter(const string &s1,const string &s2){
return s1.size()<s2.size();
}
bool GT6(const string &s){
return s.size()>=6;
}
int main(){
string word;
vector<string>v;
while(cin>>word){
v.push_back(word);
}



for(vector<string>::iterator iter=v.begin();iter!=v.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
sort(v.begin(),v.end());//排序
vector<string>::iterator uni=unique(v.begin(),v.end());//返回一个迭代器,迭代器之前是唯一的,
v.erase(uni,v.end());

stable_sort(v.begin(),v.end(),isShorter);

/*for(vector<string>::iterator iter1=v.begin();iter1!=v.end();++iter1){
cout<<*iter1<<" ";
}*/
vector<string>::size_type wc=count_if(v.begin(),v.end(),GT6);
cout<<wc<<"个"<<endl;
cout<<endl;
system("pause");
return 0;
}

根据count_if可以写出find_if

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool isShorter(const string &s1,const string &s2){
return s1.size()<s2.size();
}
bool GT6(const string &s){
return s.size()>=6;
}
int main(){
string s;
vector<string>v;
while(cin>>s){
v.push_back(s);
}

sort(v.begin(),v.end());
vector<string>::iterator uni=unique(v.begin(),v.end());
v.erase(uni,v.end());

stable_sort(v.begin(),v.end(),isShorter);

vector<string>::iterator flag=v.begin();
while((flag=find_if(flag,v.end(),GT6))!=v.end()){
cout<<*flag<<endl;
++flag;
}
cout<<endl;
system("pause");

return 0;
}

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v1(a,a+10);
vector<int>v2;
v2.resize(10);
copy(v1.begin(),v1.end(),v2.begin());

for(vector<int>::iterator iter=v2.begin();iter!=v2.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
system("pause");
return 0;
}

然而list已经自己定义好了,看,对比一下,多简单

#include<iostream>
#include<list>
#include<string>
using namespace std;
int main(){
string word;
list<string>lst;
while(cin>>word){
lst.push_back(word);
}
cout<<"什么事都没做"<<endl;
for(list<string>::iterator iter=lst.begin();iter!=lst.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;

lst.sort();
cout<<"调用排序"<<endl;
for(list<string>::iterator aiter=lst.begin();aiter!=lst.end();++aiter){
cout<<*aiter<<" ";
}
cout<<endl;
lst.unique();
cout<<"调用唯一"<<endl;
for(list<string>::iterator witer=lst.begin();witer!=lst.end();++witer){
cout<<*witer<<" ";
}
cout<<endl;
system("pause");
return 0;
}

所以algorithm不用死记,掌握它是如何设计算法的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics