Поиск элемента в std :: vector

Я хочу проверить, существует ли элемент в векторе или нет, чтобы я мог разобраться с каждым случаем.
Я наткнулся на эту формулу:

#include <algorithm>

if ( std::find(vector.begin(), vector.end(), item) != vector.end() )
do_this();
else
do that();

Я не понимаю, зачем нам нужен vector.end () в конце, не достаточно ли найти (vector.begin (), vector.end (), item), чтобы найти элемент?

-4

Решение

std::find(vector.begin(), vector.end(), item)

вернет Итератор, поэтому, сравнивая его с

vector.end()

вы на самом деле проверяете, существует ли такой итератор с этим элементом.

3

Другие решения

Я не понимаю, зачем нам нужен 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();
1

Он проверяет, действительно ли было найдено значение или нет.
станд :: найти () возвращает итератор к первому элементу в диапазоне запроса.
Если возвращаемое значение равно vector.end () это означает, что он не нашел предмет.
Увидеть этот для дополнительной информации.

0
По вопросам рекламы [email protected]