1. 程式人生 > >子序列匹配search

子序列匹配search

space clu ear pre col stream gin spa span

  版本一返回[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; }

子序列匹配search