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;});

浙公网安备 33010602011771号