template < typename T, typename Iterator >
Iterator Search(const T& value, Iterator first, Iterator last) {
while (!(*first == value) && first != last) {
first++;
}
return first;
}
template < typename T, typename RIterator >
RIterator Binary(const T& value, RIterator first, RIterator last) {
if (first == last) return first;
RIterator mid = first + (last - first) / 2;
if (*mid < value) return Binary(value, mid + 1, last);
else
return Binary(value, first, mid);
}
template < typename T, typename Iterator >
Iterator Find(const T& value, Iterator first, Iterator last) {
bool check = std::is_same<std::_List_iterator<T>, Iterator>::value;
std::cout << check << "\n";
if (check == true) {
return Search(value, first, last);
} else {
Iterator res = Binary(value, first, last);
if (!(*res == value)) return last;
return first;
}
}