例如,我有这个数组:
int myArray[] = { 3, 6, 8, 33 };
如何检查给定变量x是否在其中?
我是否必须编写自己的函数并循环数组,还是在PHP中等同于in_array
的现代c ++?
答案 0 :(得分:34)
您可以使用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
则返回到范围末尾的迭代器。
答案 1 :(得分:13)
我认为您正在寻找std::any_of
,它将返回一个真/假答案来检测元素是否在容器中(数组,向量,双端队列等)
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
}
答案 2 :(得分:2)
您几乎不必在C ++中编写自己的循环。在这里,您可以使用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
需要C ++ 11。没有它,您可以使用以下命令查找数组中的元素数:
const size_t numElements = sizeof (myArray) / sizeof (myArray[0]);
...结束时:
int* end = myArray + numElements;
答案 3 :(得分:2)
试试这个
#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;
}
答案 4 :(得分:1)
int index = std::distance(std::begin(myArray), std::find(begin(myArray), end(std::myArray), VALUE));
如果找不到,则返回无效索引(数组的长度)。
答案 5 :(得分:-2)
你需要循环它。在处理基本类型数组时,C ++没有实现任何更简单的方法。
也会看到这个答案:C++ check if element exists in array