1 bool fn(vector<int>::iterator vi1,vector<int>::iterator vi2,int i) 2 { 3 vector<int>::iterator vi3=vi2-1; 4 if(vi1>vi3) 5 return 0; 6 else 7 { 8 vector<int>::iterator vi=vi1+(vi2-vi1)/2; 9 if(*vi==i) 10 return 1; 11 else if(*vi>i) 12 return fn(vi1,vi,i); 13 else 14 return fn(vi+1,vi2,i); 15 } 16 17 18 }
1 template<class U,class T> 2 bool fn(U vi1,U vi2,const T&i) 3 { 4 U vi3=vi2-1; 5 if(vi1>vi3) 6 return 0; 7 else 8 { 9 U vi=vi1+(vi3-vi1)/2; 10 if(*vi==i) 11 return 1; 12 else if(*vi>i) 13 return fn(vi1,vi,i); 14 else 15 return fn(vi+1,vi2,i); 16 } 17 18 19 } 20 21 22 23 template<class U,class T,class P> 24 bool fnn(U vi1,U vi2,const T&i,P p) 25 { 26 U vi3=vi2-1; 27 if(vi1>vi3) 28 return 0; 29 else 30 { 31 U vi=vi1+(vi3-vi1)/2; 32 if(!p(*vi,i)) 33 fnn(vi1,vi,i,p) 34 else if(!p(i,*vi)) 35 return fnn(vi+1,vi2,i,p); 36 else 37 return 1; 38 } 39 40 41 }
原文:http://www.cnblogs.com/yueba/p/4088533.html