Using random-access iterators
template<class T, class X> bool binary_search
(T begin, T end, const X& x)
{
while (begin <= end) {
T mid = begin + (end-begin)/2;
if (x == *mid)
return true;
if (x < *mid)
end = mid;
else
begin = mid + 1;
}
return false;
}