cb29a_c++_STL_算法_查找算法_(2)search_n

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;
}
发布了469 篇原创文章 · 获赞 211 · 访问量 95万+

猜你喜欢

转载自blog.csdn.net/txwtech/article/details/104393558