C++数组指针查找未找到元素时返回错误值而非NONE问题排查
问题排查与修复
你的程序未找到元素时返回错误值的核心原因是搜索范围错误,具体分析及修复如下:
问题根源
- 数组
tab固定大小为100000,但每组数据仅填充前y个元素,剩余未赋值的元素是内存中的随机垃圾值。 - 当前代码中,
find函数的搜索范围是整个数组(tab到tab + n,其中n=100000),而非当前组的有效元素区间。如果待查找的elem恰好和数组后段的随机垃圾值匹配,find会返回这个错误位置,导致输出错误索引,而非进入else分支输出NONE。 - 判断条件
itr != end(tab)也不恰当,end(tab)指向整个数组的末尾,而非当前组有效元素的结束位置。
修复后的代码
#include <iostream> #include <algorithm> using namespace std; int main() { int tab[100000]; int x, y, z, elem; cin >> x; for(int i=0; i<x; i++) { cin >> y; for(int j=0; j<y; j++) { cin >> z; tab[j] = z; } cin >> elem; // 限定搜索范围为当前组的有效元素:tab 到 tab+y auto itr = find(tab, tab + y, elem); if (itr != tab + y) { cout << distance(tab, itr) + 1 << endl; } else { cout << "NONE" << endl; } } return 0; }
关键修改说明
- 把
find的搜索终点从tab + n改为tab + y,确保只在当前组的有效元素中查找。 - 将判断条件改为
itr != tab + y,准确判断元素是否在有效范围内找到。 - 添加
endl保证每组结果换行,与示例输出格式一致。
内容的提问来源于stack exchange,提问作者HPX_999
相关产品推荐
相关产品推荐

