cb30a_c++_STL_算法_查找算法_(3)search_find_end
search()
pos = search(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());
find_end(),从后面开始找
注意:
这两个算法是一对
第二个算法应该叫search_end(),但是被命名为find_end()
pos2 = search(ivec.begin(), ivec.end(),checkEvenArgs,checkEvenArgs+3, checkEven);
//ivec.begin(), ivec.end()传给第一个参数,elem.
//,checkEvenArgs,checkEvenArgs+3,传给checkEven的第二个参数,even
//bool checkEven(int elem, bool even)//二元谓词,两个return
/*cb30a_c++_STL_算法_查找算法_(3)search_find_end
search()
pos = search(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());
find_end(),从后面开始找
注意:
这两个算法是一对
第二个算法应该叫search_end(),但是被命名为find_end()
pos2 = search(ivec.begin(), ivec.end(),checkEvenArgs,checkEvenArgs+3, checkEven);
//ivec.begin(), ivec.end()传给第一个参数,elem.
//,checkEvenArgs,checkEvenArgs+3,传给checkEven的第二个参数,even
//bool checkEven(int elem, bool even)//二元谓词,两个return
*/
#include <iostream>
#include <algorithm>
#include <deque>
#include <list>
#include <vector>
using namespace std;
//1,2,2,4,5
//true, false, true
//false表示奇数
//true 偶数
bool checkEven(int elem, bool even)//二元谓词,两个return
{
if (even)
return elem % 2 == 0;//
else
return elem % 2 == 1;//
}
//把 true, false, true,三个传进去,连续3个都返回true,说明查找到了。
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 (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());
cout << "在ideq容器里面找ilist" << endl;
if (pos != ideq.end())
cout << "找到了位置:" << distance(ideq.begin(), pos)+1 << endl;
else
cout << "没找到" << endl;
++pos;
pos = search(pos, ideq.end(), ilist.begin(), ilist.end());
cout << "在ideq容器里面找ilist" << endl;
if (pos != ideq.end())
cout << "找到了位置:" << distance(ideq.begin(), pos)+1 << endl;
else
cout << "没找到" << endl;
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;
else
cout << "没找到" << endl;
cout << "使用谓词查找" << endl;
vector<int> ivec;
bool checkEvenArgs[3] = {true,false,true};
for (int i = 1; i <= 9; ++i)
ivec.push_back(i);
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout << *iter << ' ';
cout << endl;
vector<int>::iterator pos2;
pos2 = search(ivec.begin(), ivec.end(),checkEvenArgs,checkEvenArgs+3, checkEven);
//ivec.begin(), ivec.end()传给第一个参数,elem.
//,checkEvenArgs,checkEvenArgs+3,传给checkEven的第二个参数,even
//bool checkEven(int elem, bool even)//二元谓词,两个return
//1,2,3,4,5,6,7
//true,false,true. 对应2,3,4。所以在第二就找到了。显示2
if (pos2 != ivec.end())
cout << "找到了,位置是:" << distance(ivec.begin(), pos2)+1 << endl;
else
cout << "没找到" << endl;
return 0;
}