版本一返回[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; }
原文:https://www.cnblogs.com/tianzeng/p/10371660.html