C++ Primer 学习中。。。
简单记录下我的学习过程 (代码为主)
search_n //查找连续的n个满足条件的。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<deque>
#include<vector>
#include<algorithm>
using namespace std;
/*************************************************************************************
std::search_n 所有容器适用 algorithm
--------------------------------------------------------------------------------------
template <class ForwardIterator, class Size, class T>
ForwardIterator search_n ( ForwardIterator first, ForwardIterator last,
Size count, const T& value );
template <class ForwardIterator, class Size, class T, class BinaryPredicate>
ForwardIterator search_n ( ForwardIterator first, ForwardIterator last,
Size count, const T& value, BinaryPredicate pred );
eg:
template<class ForwardIterator, class Size, class T>
ForwardIterator search_n ( ForwardIterator first, ForwardIterator last,
Size count, const T& value )
{
ForwardIterator it, limit;
Size i;
limit=first;
advance(limit,distance(first,last)-count);
while (first!=limit)
{
it = first;
i=0;
while (*it==value) // or: while (pred(*it,value)) for the pred version
{
++it;
if (++i==count) return first;
}
++first;
}
return last;
}
**************************************************************************************/
bool mypredicate (int i, int j)
{
return (i==j);
}
int main ()
{
int myints[]= {10,20,30,30,20,10,10,10,20};
vector<int> myvector (myints,myints+9);
vector<int>::iterator it;
// using default comparison:
/*** search_n(s,e,cnt,num);找区间内[s,e)连续cnt个的num 返回的是找到的第一个num的迭代器***/
it = search_n (myvector.begin(), myvector.end(), 2, 30);
if (it!=myvector.end())
cout << "two 30s found at position " << int(it-myvector.begin()) << endl;
else
cout << "match not found" << endl;
// using predicate comparison:
/*** search_n(s,e,cnt,num,cmp);找区间内[s,e)连续cnt个的num符合cmp()条件的,返回的是找到的第一个num的迭代器***/
it = search_n (myvector.begin(), myvector.end(), 3, 10, mypredicate);
if (it!=myvector.end())
cout << "three 10s found at position " << int(it-myvector.begin()) << endl;
else
cout << "match not found" << endl;
//连续的4个大于10的数
it = search_n (myvector.begin(), myvector.end(), 4, 10, greater<int>());//谓词//其实本函数不规范。
// it = search_n_if (myvector.begin(), myvector.end(), 4, bind2nd(greater<int>(),10) );//很遗憾,并没有search_n_if
if (it!=myvector.end())
cout << "连续的4个大于10的数 " << int(it-myvector.begin()) << endl;
else
cout << "match not found" << endl;
return 0;
}
/******
Output:
two 30s found at position 2
three 10s found at position 5
连续的4个大于10的数 1
******/