STL算法------查找2

search_n           查找连续匹配的

search


1. search_n(b,e, c, v)

2. search_n(b, e, c, v, p )           --p谓词

3.注意   该算法的第二种形式应该是 search_n_if(b,e,c,p)


#include <iostream>
#include <deque>
#include <algorithm>
#include <functional>

using namespace std;

int main( int argc, char** argv )
{
	deque<int> deq;
	for( int i=0; i<9; ++i )
	{
		if(i == 3)
		{
			deq.push_back(i);
			deq.push_back(i);
			deq.push_back(i);
			deq.push_back(i);
		}
		else
		{
			deq.insert( deq.end(), i );
		}
	}

	for(deque<int>::const_iterator citr=deq.begin(); citr!=deq.end(); ++citr )
	{
		cout<<*citr<< ' ';
	}
	cout<<endl;

	deque<int>::iterator pos;
	// 连续的4个3
	pos = search_n(deq.begin(), deq.end(), 4, 3);
	if( pos != deq.end() )
	{
		cout<<"find: "<<*pos<<endl;
		cout<<"序号位置:"<<distance(deq.begin(), pos)+1<<endl;
	}
	else
	{
		cout<<"not find"<<endl;
	}

	//pos = search_n_if( deq.begin(), deq.end(), 3, bind2nd(greater<int>(), 6));
	pos = search_n(deq.begin(), deq.end(), 3, 5, greater<int>());
	if( pos != deq.end() )
	{
		cout<<"find > 6 "<<"start with "<<distance(deq.begin(),pos)+1<<endl;
	}else{
		cout<<"not find"<<endl;
	}


	return 0;
}
<pre name="code" class="cpp"><pre name="code" class="cpp">	//找到t2中元素在test中第一次出现的位置,不像find函数只能找一个
	//it=search(test.begin(),test.end(),t2.begin(),t2.end());

	//寻找首次连续出现2次7的位置
	//it=search_n(test.begin(),test.end(),2,7);

	//寻找首次连续出现2次大于7的位置
	//it=search_n(test.begin(),test.end(),2,7,[](int i,int j){return i>j;});
   
 


posted @ 2015-03-04 12:03  SandKing  阅读(9)  评论(0)    收藏  举报  来源