说我有这样的数组:
int* arr;
后来设置为:
arr = new int[capacity];
如何检查数字是否在这样的数组中?我知道我可以使用for循环遍历它但是有一个函数可以帮我吗?
你可以使用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);
此库函数查找指定迭代器之间的数字"begin"和"end".在您的数组中,指向第一个元素的指针是"begin",而指向第一个元素(end_arr
)的指针是"end".
如果找不到该数字,库函数将返回结束迭代器(不是nullptr
,如您所料),因此您必须将其返回值与结束迭代器进行比较,以发现是否找到了该数字.
您还可以使用std::vector
表示数组,而不是"指针+容量".这通常会导致更易于阅读的代码,这也更加强大(即更少的错误).std::vector
在内部保持其能力,并且还有专门的方法begin
和end
:
std::vectorarr; ... 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());