Я не понимаю, почему мы должны vector.end() в конце концов, разве находка (vector.begin(), vector.end(), п) достаточно, чтобы найти элемент?
Результат find
на неспособность найти соответствие итератор, указывающий на конец предлагаемого диапазона, и нет ничего особенного о конечных итераторы, которые позволяют им быть сравнены как логическое состояние.
find
был разработан как универсальный алгоритм, который работает на самых разных контейнерах (включая даже те, которые потенциально находятся за пределами стандартной библиотеки). Он также предназначен для просто большего, чем возврат, был ли найден элемент или нет - он возвращает итератор, указывающий на элемент, если он найден. В результате он не возвращает нуль или что-то в этом роде, если ему не удается найти элемент. Он возвращает итераторы.
Если вы действительно такого рода вещи много (и я только рекомендую делать что-нибудь подобное, если вы делаете, так как вы вводите что-то чуждое ежедневного кода), вы можете сделать что-то вроде этого:
/// @return True if `val` is found in `[first, last)`
template <class Iterator, class Element>
bool contains(Iterator first, Iterator last, const Element& val)
{
return std::find(first, last, val) != last;
}
...
if (contains(vector.begin(), vector.end(), item))
do_this();
else
do_that();
Возможно, вам потребуется прочитать ссылку, например, например. [этот] (http://en.cppreference.com/w/cpp/algorithm/find). Вам особенно нужно прочитать, что 'std :: find' возвращает в случае, если вещь, которую вы ищете, не найдена. –