适用于STL容器的泛型二分查找算法
在algorithm文件中有查找的算法,不过它是顺序查找的,它的实现是这样的
template<class InputIterator, class T> InputIterator find(InputIterator first, InputIterator end, const T& key) { while(first != end) { if(*first == key) return first first++; } return end; }
下面我们实现一个二分查找的:
template<class InputIterator, class T> InputIterator bfind(InputIterator first, InputIterator end, const T& key) { InputIterator l = first; InputIterator r = end-1; InputIterator mid; while(l <= r) { mid = l + distance(l, r)/2; if(*mid > key) r = mid - 1; else if(key > *mid ) l = mid + 1; else return mid; } return end; }
那么我们就可以这样来使用啦,注意容器中的数据一定要是排好序的
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(int argc, char* argv[]) { int arr[] = {1, 2, 3, 4, 5}; vector<int> ivec(arr, arr+5); vector<int>::iterator iter = bfind(ivec.begin(), ivec.end(), 4); if(iter != ivec.end()) cout<<*iter<<endl; else cout<<"not find"<<endl; return 0; }