Можно использовать std::find
от <algorithm>
:
#include <vector>
vector<int> vec;
//can have other data types instead of int but must same datatype as item
std::find(vec.begin(), vec.end(), item) != vec.end()
Это возвращает bool (true
если существующий, false
иначе). С Вашим примером:
#include <algorithm>
#include <vector>
if ( std::find(vec.begin(), vec.end(), item) != vec.end() )
do_this();
else
do_that();
Примите во внимание, что, если Вы собираетесь быть выполнением большого количества поисков, существуют контейнеры STL, которые лучше для этого. Я не знаю, каково Ваше приложение, но ассоциативные контейнеры как станд.:: карта может быть достойной рассмотрения.
станд.:: вектор является предпочтительным контейнером, если у Вас нет причины для другого, и поиски значением могут быть такой причиной.
Как другие сказали, используйте STL find
или find_if
функции. Но если Вы ищете в очень больших векторах, и это влияет на производительность, можно хотеть отсортировать вектор и затем использовать binary_search
, lower_bound
, или upper_bound
алгоритмы.
Используйте находят от заголовка алгоритма stl. Я проиллюстрировал его использование с международным типом. Можно использовать любой тип, который Вы любите, пока можно выдержать сравнение для равенства (перегрузка ==, если Вы должны для своего пользовательского класса).
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
typedef vector<int> IntContainer;
typedef IntContainer::iterator IntIterator;
IntContainer vw;
//...
// find 5
IntIterator i = find(vw.begin(), vw.end(), 5);
if (i != vw.end()) {
// found it
} else {
// doesn't exist
}
return 0;
}
Использование STL находит функция.
Имеют в виду, что существует также функция find_if, которую можно использовать, если поиск более сложен, т.е. если Вы только ищете элемент, но, например, хотите, видят, существует ли элемент, который выполняет определенное условие, например, строка, которая запускается с "abc". (find_if
дал бы Вам итератор, который указывает на первое на такой элемент).
Я лично использовал шаблоны в последнее время для обработки нескольких типов контейнеров сразу, а не соглашения только с векторами. Я нашел подобный пример онлайн (не может помнить, где), таким образом, кредит переходит к тому, от кого бы ни я воровал это. Этот конкретный шаблон, кажется, обрабатывает необработанные массивы также.
template <typename Container, typename T = typename std::decay<decltype(*std::begin(std::declval<Container>()))>::type>
bool contains(Container && c, T v)
{
return std::find(std::begin(c), std::end(c), v) != std::end(c);
}