c++之STL(13) STL 算法 - 查找算法(3)search() find_end()

来源:互联网 发布:电脑自动按键软件 编辑:程序博客网 时间:2024/06/06 13:06

search() 是从前面找

find_end() 是从后面找

注意:两个算法是一对,第二个算法叫search_end(),但是被命名为find_end();

两个都是用来在容器中查找,连续的数据在容器中是否存在 

两个方法都可以使用谓词

#include<iostream>#include<algorithm>#include<deque>#include<list>//using namespace std;// 二元谓词bool checkEven(int elem, bool even){if (even)return elem % 2 == 0;elsereturn elem % 2 == 1;}int main(){deque<int> ideq;list<int> ilist;for (int i = 1; i <= 7; i++)ideq.insert(ideq.end(), i);for (int i = 1; i <= 7; i++)ideq.insert(ideq.end(), i);for (int i = 1; i <= 7; i++)ideq.insert(ideq.end(), i);for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); iter++)cout << *iter << ' ';cout << endl;for (int i = 3; i <= 6; i++)ilist.insert(ilist.end(), i);for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); iter++)cout << *iter << ' ';cout << endl;deque<int>::iterator pos;pos = search(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());/*if (pos != ideq.end())cout << "找到了:" << distance(ideq.begin(), pos) + 1 << endl;elsecout << "没找到!" << endl;++pos;pos = search(pos, ideq.end(), ilist.begin(), ilist.end());if (pos != ideq.end())cout << "找到了:" << distance(ideq.begin(), pos) + 1 << endl;elsecout << "没找到!" << endl;*/while (pos != ideq.end()){cout << "找到了:" << distance(ideq.begin(), pos) + 1 << endl;++pos;pos = search(pos, ideq.end(), ilist.begin(), ilist.end());}cout << "使用find_end进行查找" << endl;// 从后面看开始找pos = find_end(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());if (pos != ideq.end())cout << "找到了:" << distance(ideq.begin(), pos) + 1 << endl;elsecout << "没找到!" << endl; //system("pause");return 0;}
#include<iostream>#include<algorithm>#include<vector>#include<list>//using namespace std;// 二元谓词bool checkEven(int elem, bool even){if (even)return elem % 2 == 0;elsereturn elem % 2 == 1;}int main(){vector<int> ivec;for (int i = 1; i <= 9; i++)//ivec.insert(ivec.end(), i);ivec.push_back(i);for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout << *iter << ' ';cout << endl;bool checkEvenArgs[3] = { true, false, true };// 偶数 奇数 偶数vector<int>::iterator pos;pos = search(ivec.begin(), ivec.end(), checkEvenArgs, checkEvenArgs + 3, checkEven);if (pos != ivec.end())cout << "找到了!位置:" << distance(ivec.begin(), pos) + 1 << endl;elsecout << "没找到!" << endl;//system("pause");return 0;}



0 0
原创粉丝点击