cb29a_c++_STL_算法_查找算法_(2)search_n
//比如:连续查找连续的n个8
search_n(b,e,c,v),迭代器b,begin(),e,end().连续的c个v
pos=search_n(ideq.begin(), ideq.end(), 4, 3);
search_n(b,e,c,v,p) p,谓词参数,查找的规则(条件)
pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());
greater<int>(),预定义函数对象。
自己做谓词,需要用二元谓词,就是两个参数的。
特别注意:
该算法的第二种形式应该是:
search_n_if(b,e,c,p)//实际不能使用,委员会审查,未发现,估计是bug.
pos=search_n_if(ideq.begin(),ideq.end(),3,bind2nd(greater<int>(),6));//实际不能使用
等效于
pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());//这个可以。
distance算法
cout << "找到了连续的4个3: 当前位置:" << distance(ideq.begin(),pos)+1 << endl;
/*cb29a_c++_STL_算法_查找算法_(2)search_n
//比如:连续查找连续的n个8
search_n(b,e,c,v),迭代器b,begin(),e,end().连续的c个v
pos=search_n(ideq.begin(), ideq.end(), 4, 3);
search_n(b,e,c,v,p) p,谓词参数,查找的规则(条件)
pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());
greater<int>(),预定义函数对象。
自己做谓词,需要用二元谓词,就是两个参数的。
特别注意:
该算法的第二种形式应该是:
search_n_if(b,e,c,p)//实际不能使用,委员会审查,未发现,估计是bug.
pos=search_n_if(ideq.begin(),ideq.end(),3,bind2nd(greater<int>(),6));//实际不能使用
等效于
pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());//这个可以。
distance算法
cout << "找到了连续的4个3: 当前位置:" << distance(ideq.begin(),pos)+1 << endl;
*/
#include <iostream>
#include <algorithm>
#include <deque>
#include <functional>
using namespace std;
int main()
{
deque<int> ideq;
for (int i = 1; i <= 9; ++i)
{
if (i == 3)
{
ideq.push_back(i);
ideq.push_back(i);
ideq.push_back(i);
//ideq.push_back(i);
}
else
ideq.push_back(i);
}
for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)
cout << *iter << ' ';
cout << endl;
deque<int>::iterator pos;
pos=search_n(ideq.begin(), ideq.end(), 4, 3);
if (pos != ideq.end())
{
cout << "找到了连续的4个3: 当前序号位置:" << distance(ideq.begin(),pos)+1 << endl;
}
else
cout << "没有找到" << endl;
cout << "连续的3个大于的6的数" << endl;
pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());
//pos = search_n_if(ideq.begin(), ideq.end(), 3, bind2nd(greater<int>(), 6));//错误//实际不能使用
if (pos != ideq.end())
{
cout << "连续的3个大于的6的数,当前序号位置:" << distance(ideq.begin(), pos) + 1 << endl;
}
else
cout << "没有找到" << endl;
return 0;
}