You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++数组指针查找未找到元素时返回错误值而非NONE问题排查

问题排查与修复

你的程序未找到元素时返回错误值的核心原因是搜索范围错误,具体分析及修复如下:

问题根源

  1. 数组tab固定大小为100000,但每组数据仅填充前y个元素,剩余未赋值的元素是内存中的随机垃圾值。
  2. 当前代码中,find函数的搜索范围是整个数组(tab到tab + n,其中n=100000),而非当前组的有效元素区间。如果待查找的elem恰好和数组后段的随机垃圾值匹配,find会返回这个错误位置,导致输出错误索引,而非进入else分支输出NONE。
  3. 判断条件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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 13:24:26