Я хочу проверить, существует ли элемент в векторе или нет, чтобы я мог разобраться с каждым случаем.
Я наткнулся на эту формулу:
#include <algorithm>
if ( std::find(vector.begin(), vector.end(), item) != vector.end() )
do_this();
else
do that();
Я не понимаю, зачем нам нужен vector.end () в конце, не достаточно ли найти (vector.begin (), vector.end (), item), чтобы найти элемент?
std::find(vector.begin(), vector.end(), item)
вернет Итератор, поэтому, сравнивая его с
vector.end()
вы на самом деле проверяете, существует ли такой итератор с этим элементом.
Я не понимаю, зачем нам нужен vector.end () в конце, не так ли?
найти (vector.begin (), vector.end (), item) достаточно, чтобы найти элемент?
Результат 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();
Он проверяет, действительно ли было найдено значение или нет.
станд :: найти () возвращает итератор к первому элементу в диапазоне запроса.
Если возвращаемое значение равно vector.end () это означает, что он не нашел предмет.
Увидеть этот для дополнительной информации.