说我有这样的数组:
int* arr;
后来设置为:
arr = new int[capacity];
如何检查数字是否在这样的数组中?我知道我可以使用for循环遍历它但是有一个函数可以为我做这个吗?
答案 0 :(得分:5)
您可以使用std::find
:
arr = new int[capacity];
const auto end_arr = arr + capacity;
int* found = std::find(arr, end_arr, 42);
if (found == end_arr)
std::cout << "Not found";
else
std::cout << "Found at index " << (found - arr);
此库函数查找指定的迭代器之间的数字,&#34;开始&#34;和&#34;结束&#34;。在数组中,指向第一个元素的指针是&#34;开始&#34;,而指针经过最后一个元素(end_arr
)是&#34;结束&#34;。
如果找不到数字,库函数会返回结束迭代器(不是nullptr
,正如您所料),因此您必须将其返回值与结束迭代器进行比较,以发现是否找到了数字
您还可以使用std::vector
来表示数组,而不是&#34;指针+容量&#34;。这通常会导致更易于阅读的代码,这也更加健壮(即更少的错误)。 std::vector
在内部拥有自己的能力,并且还有专门的方法begin
和end
:
std::vector<int> arr;
...
arr.resize(capacity);
...
auto found = std::find(arr.begin(), arr.end(), 42);
if (found == arr.end())
std::cout << "Not found";
else
std::cout << "Found at index " << (found - arr.begin());