C++ STL 算法技术

ybf2 贡献于2016-01-28

作者 雨林木风  创建于2009-07-22 14:24:00   修改者User  修改于2011-09-08 14:22:00字数6948

文档摘要:C++ STL常用算法使用时包含#include algorithm 一、非变异算法是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。非变异算法具有极为广泛的适用性,基本上可应用与各种容器。1、查找容器元素find它用于查找等于某值的元素。它在迭代器区间[first,last)上查找等于value值的元素,如果迭代器i所指的元素满足*i=value,则返回迭代器i;
关键词:

C++STL 常用算法 使用时包含#include 一、非变异算法 是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。非变异算法具有极为广泛的适用性,基本上可应用与各种容器。 1、查找容器元素find 它用于查找等于某值的元素。它在迭代器区间[first,last)上查找等于value值的元素,如果迭代器i所指的元素满足*i=value,则返回迭代器i;未找到满足条件的元素,返回last。 #include #include #include using namespace std; void main(){ int num_to_find = 6; vector v1; for( int i = 0; i < 10; i++ ) v1.push_back(2*i); vector::iterator result; result = find( v1.begin(), v1.end(), num_to_find ); if( result == v1.end() ) cout << "未找到任何元素匹配 " << num_to_find << endl; else cout << "匹配元素的索引值是 " << result-v1.begin() << endl; } 2、条件查找容器元素find_if 利用返回布尔值的谓词判断pred,检查迭代器区间[first,last)上的每一个元素,如果迭代器i满足pred(*i)=true,表示找到元素并返回迭代值i(找到的第一个符合条件的元素);未找到元素,返回末位置last。 #include #include #include using namespace std; bool divby5(int x) { return x%5?0:1; } void main() { vector v(20); for(int i=0;i::iterator ilocation; ilocation=find_if(v.begin(),v.end(),divby5); if(ilocation!=v.end()) cout<<"找到第一个能被5整除的元素:"<<*ilocation < l; count(l.begin(),l.end(),value)。 4、条件统计count_if。 count_if(l.begin(),l.end(),pred)。谓词pred含义同find_if中的谓词。 5、子序列搜索search search算法函数在一个序列中搜索与另一序列匹配的子序列。 #include #include #include using namespace std; void main(){ vector v1; cout<<"v1:"; for(int i=0;i<5;i++){ v1.push_back(i+5); //注意:v1定义时没有给定大小,因此这里不能直接使用赋值语句。 cout< v2; cout<<"v2:"; for(i=0;i<2;i++){ v2.push_back(i+7); cout<::iterator ilocation; ilocation=search(v1.begin(),v1.end(),v2.begin(),v2.end()); if(ilocation!=v1.end()) cout<<"v2的元素包含在v1中,起始元素为"<<"v1[" < #include #include using namespace std; void main(){ vector v; v.push_back(1); v.push_back(8); v.push_back(8); v.push_back(8); v.push_back(6); v.push_back(6); v.push_back(8); vector::iterator i; i=search_n(v.begin(),v.end(),3,8); if(i!=v.end()) cout<<"在v中找到3个连续的元素8"< #include #include using namespace std; void main(){ vector v1; v1.push_back(-5); v1.push_back(1); v1.push_back(2); v1.push_back(-6); v1.push_back(-8); v1.push_back(1); v1.push_back(2); v1.push_back(-11); vector v2; v2.push_back(1); v2.push_back(2); vector::iterator i; i=find_end(v1.begin(),v1.end(),v2.begin(),v2.end()); if(i!=v1.end()) cout<<"v1中找到最后一个匹配v2的子序列,位置在" <<"v1["< #include #include #include using namespace std; void main(){ vector v; v.push_back(1); v.push_back(3); v.push_back(5); list l; l.push_back(2); l.push_back(4); l.push_back(6); l.push_back(8); l.push_back(10); copy(v.begin(),v.end(),l.begin()); list::iterator i; for(i=l.begin();i!=l.end();i++) cout<<*i<<' '; cout< #include #include #include using namespace std; int square(int x){ return x*x; } void main(){ vector v; v.push_back(5); v.push_back(15); v.push_back(25); list l(3); transform(v.begin(),v.end(),l.begin(),square); list::iterator i; for(i=l.begin();i!=l.end();i++) cout<<*i<<' '; cout< #include #include using namespace std; void main() { vector v; v.push_back(13); v.push_back(25); v.push_back(27); v.push_back(25); v.push_back(29); replace(v.begin(),v.end(),25,100); vector::iterator i; for(i=v.begin();i!=v.end();i++) cout<<*i<<' '; cout< #include #include using namespace std; bool odd(int x){ return x%2; } void main(){ vector v; for(int i=1;i<10;i++) v.push_back(i); replace_if(v.begin(),v.end(),odd,100); vector::iterator ilocation; for(ilocation=v.begin();ilocation!=v.end();ilocation++) cout<<*ilocation<<' '; cout< #include #include using namespace std; void main(){ vector v(10); fill_n(v.begin(),5,-1); vector::iterator ilocation; for(ilocation=v.begin();ilocation!=v.end();ilocation++) cout<<*ilocation<<' '; cout< #include #include using namespace std; void main(){ vector v(10); generate_n(v.begin(),5,rand); vector::iterator ilocation; for(ilocation=v.begin();ilocation!=v.end();ilocation++) cout<<*ilocation<<' '; cout< #include #include using namespace std; bool even(int x) { return x%2?0:1; } void main() { vector v; for(int i=1;i<=10;i++) v.push_back(i); vector::iterator ilocation,result; cout<<"移除前:"; for(ilocation=v.begin();ilocation!=v.end();ilocation++) cout<<*ilocation<<' '; cout< #include #include using namespace std; void main(){ vector v; v.push_back(2); v.push_back(6); v.push_back(6); v.push_back(6); v.push_back(9); v.push_back(6); v.push_back(3); vector::iterator ilocation,result; result=unique(v.begin(),v.end()); for(ilocation=v.begin();ilocation!=result;ilocation++) cout<<*ilocation<<' '; cout< #include #include using namespace std; void main(){ vector v; v.push_back(5); v.push_back(6); v.push_back(4); v.push_back(8); v.push_back(2); v.push_back(3); v.push_back(7); v.push_back(1); v.push_back(9); make_heap(v.begin(),v.end()); v.push_back(20); push_heap(v.begin(),v.end()); vector::iterator ilocation; for(ilocation=v.begin();ilocation!=v.end();ilocation++) cout<<*ilocation<<' '; cout< #include #include using namespace std; void main(){ vector v; v.push_back(3); v.push_back(9); v.push_back(6); v.push_back(3); v.push_back(17); v.push_back(20); v.push_back(12); vector::iterator ilocation; for(ilocation=v.begin();ilocation!=v.end();ilocation++) cout<<*ilocation<<' '; cout< #include #include using namespace std; void main(){ vector v; v.push_back(2); v.push_back(8); v.push_back(-15); v.push_back(90); v.push_back(26); v.push_back(7); v.push_back(23); v.push_back(30); v.push_back(-27); v.push_back(39); v.push_back(55); vector::iterator ilocation; for(ilocation=v.begin();ilocation!=v.end();ilocation++) cout<<*ilocation<<' '; cout<

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档