如何在动态数组c ++中查找数字?

时间:2017-01-15 11:01:22

标签: c++

说我有这样的数组:

int* arr; 

后来设置为:

arr = new int[capacity];

如何检查数字是否在这样的数组中?我知道我可以使用for循环遍历它但是有一个函数可以为我做这个吗?

1 个答案:

答案 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在内部拥有自己的能力,并且还有专门的方法beginend

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());