Как я могу проверить, существует ли заданный int в массиве?
Например, у меня есть этот массив:
int myArray[] = { 3, 6, 8, 33 };
Как проверить, имеется ли в нем заданная переменная x?
Должен ли я писать свою собственную функцию и цитировать массив, или есть ли в современном С++ эквиваленте in_array
в PHP?
Ответы
Ответ 1
Вы можете использовать std::find
для этого:
#include <algorithm> // for std::find
#include <iterator> // for std::begin, std::end
int main ()
{
int a[] = {3, 6, 8, 33};
int x = 8;
bool exists = std::find(std::begin(a), std::end(a), x) != std::end(a);
}
std::find
возвращает итератор в первое вхождение x
или итератор в один конец конца диапазона, если x
не найден.
Ответ 2
Я думаю, что вы ищете std::any_of
, который вернет истинный/ложный ответ, чтобы определить, находится ли элемент в контейнере ( массив, вектор, deque и т.д.)
int val = SOME_VALUE; // this is the value you are searching for
bool exists = std::any_of(std::begin(myArray), std::end(myArray), [&](int i)
{
return i == val;
});
Если вы хотите знать, где находится элемент, std::find
вернет итератор в первый элемент, соответствующий любым критериям, которые вы предоставляете (или предикат, который вы ему даете).
int val = SOME_VALUE;
int* pVal = std::find(std::begin(myArray), std::end(myArray), val);
if (pVal == std::end(myArray))
{
// not found
}
else
{
// found
}
Ответ 3
Вам почти никогда не приходится писать свои собственные циклы на С++. Здесь вы можете использовать std:: find.
const int toFind = 42;
int* found = std::find (myArray, std::end (myArray), toFind);
if (found != std::end (myArray))
{
std::cout << "Found.\n"
}
else
{
std::cout << "Not found.\n";
}
std::end
требуется С++ 11. Без него вы можете найти количество элементов в массиве с помощью:
const size_t numElements = sizeof (myArray) / sizeof (myArray[0]);
... и конец:
int* end = myArray + numElements;
Ответ 4
Попробуйте это
#include <iostream>
#include <algorithm>
int main () {
int myArray[] = { 3 ,6 ,8, 33 };
int x = 8;
if (std::any_of(std::begin(myArray), std::end(myArray), [=](int n){return n == x;})) {
std::cout << "found match/" << std::endl;
}
return 0;
}
Ответ 5
int index = std::distance(std::begin(myArray), std::find(begin(myArray), end(std::myArray), VALUE));
Возвращает недопустимый индекс (длина массива), если не найден.
Ответ 6
Вам нужно пройти через него. С++ не реализует более простой способ сделать это, когда вы имеете дело с массивами примитивных типов.
также см. этот ответ: С++ проверить, существует ли элемент в массиве