如何高效搜索特定下标在int数组中的元素?
- 内容介绍
- 文章标签
- 相关推荐
本文共计814个文字,预计阅读时间需要4分钟。
直接使用 `std::find` 查找最小事例,它返回一个迭代器,指向下一个地址。手动写 `for` 循环不仅容易越界,还可能漏掉 `size==0` 的边界情况。
- 必须包含
<algorithm>头文件 -
std::find找不到时返回尾迭代器,要检查是否等于std::end(arr),不能只判== nullptr或直接解引用 - 对原生数组要用
std::begin(arr)和std::end(arr),别传指针长度——arr + n容易算错
int arr[] = {10, 20, 30, 40}; int n = sizeof(arr) / sizeof(arr[0]); auto it = std::find(std::begin(arr), std::end(arr), 30); int idx = (it != std::end(arr)) ? it - std::begin(arr) : -1; // idx == 2
数组不是 std::vector,别误用 at() 或 index_of()
C++ 原生数组没有成员函数,arr.at(i)、arr.index_of(x) 全是编译错误。有人抄 Python 或 Java 习惯,一写就报 error: 'int [4]' has no member named 'at'。
本文共计814个文字,预计阅读时间需要4分钟。
直接使用 `std::find` 查找最小事例,它返回一个迭代器,指向下一个地址。手动写 `for` 循环不仅容易越界,还可能漏掉 `size==0` 的边界情况。
- 必须包含
<algorithm>头文件 -
std::find找不到时返回尾迭代器,要检查是否等于std::end(arr),不能只判== nullptr或直接解引用 - 对原生数组要用
std::begin(arr)和std::end(arr),别传指针长度——arr + n容易算错
int arr[] = {10, 20, 30, 40}; int n = sizeof(arr) / sizeof(arr[0]); auto it = std::find(std::begin(arr), std::end(arr), 30); int idx = (it != std::end(arr)) ? it - std::begin(arr) : -1; // idx == 2
数组不是 std::vector,别误用 at() 或 index_of()
C++ 原生数组没有成员函数,arr.at(i)、arr.index_of(x) 全是编译错误。有人抄 Python 或 Java 习惯,一写就报 error: 'int [4]' has no member named 'at'。

