#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
#include <list>
#include <set>
#include <cstdlib>
using namespace std;
template <class Integer>
struct congruent
{
congruent(Integer mod)
{
N=mod;
}
bool operator()(Integer a,Integer b)const
{
return (a-b)%N==0;
}
Integer N;
};
int main()
{
const char s1[]="Hello,world!";
const char s2[]="world";
const int N1=strlen(s1);
const int N2=strlen(s2);
const char* p=search(s1,s1+N1,s2,s2+N2);
if(p!=s1+N1)
cout<<p-s1<<endl;
else
cout<<"error"<<endl;
/**************带条件的search*****************************/
int A[10]={23,46,81,2,43,19,14,98,72,51};
int digits[3]={1,2,3};
int* seq=search(A,A+10,digits,digits+3,congruent<int>(10));//???执行过程
if(seq!=A+10)
cout<<seq-A<<endl;
else
cout<<"error"<<endl;
/**************find_end()查找最后匹配的字符串*****************************/
char* s="executable.exe";
char* suffix="exe";
const int N=strlen(s);
const int N_suf=strlen(suffix);
char* location=find_end(s,s+N,suffix,suffix+N_suf);
if(location!=s+N)
cout<<location-s<<" "<<location<<endl;
return 0;
}