子序列匹配search

  版本一返回[first1,last1-(last2-first2)]中的第一个iterator i,使得满足对于[first2,last2)中的每个iterator j,*(i+(j-first2))==*j,也就是在在每个以i开头的第一个字序列中,必须与第二个子序列相同

  版本二返回[first1,last1-(last2-first2)]中的第一个iterator i,使得满足对于[first2,last2)中的每个iterator j,表达式_Comp(*(i+(j-first2)),*j)为true,如果不满足,就向后移动第一个子序列的i,直到找到第一个满足的。

template<class ForwardIterator1, class ForwardIterator2>
   ForwardIterator1 search(
      ForwardIterator1 _First1, 
      ForwardIterator1 _Last1,
      ForwardIterator2 _First2, 
      ForwardIterator2 _Last2
   );
template<class ForwardIterator1, class ForwardIterator2, class Pr>
   ForwardIterator1 search(
      ForwardIterator1 _First1, 
      ForwardIterator1 _Last1,
      ForwardIterator2 _First2, 
      ForwardIterator2 _Last2
      BinaryPredicate _Comp
   );

code

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

template <typename Integer>
class cengruent
{
    private:
        Integer n;
    public:
        cengruent(Integer m):n(m){}
        bool operator()(Integer a,Integer b)
        {
            return (a-b)%n==0;
        }
};
int main()
{
    vector<int> v{23,46,81,2,43,19,14,98,72,51};
    vector<int> v1{1,2,3};
    auto it=search(v.begin(),v.end(),v1.begin(),v1.end(),cengruent<int>(10));
    for(auto i=it;i!=it+3;++i)
        cout<<*i<<" ";
    cout<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/tianzeng/p/10371660.html