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

C++线性搜索返回匹配下标动态数组实现及std::vector优化咨询

问题分析
  • 动态数组创建语法错误:C++ 中new int[]不合法,必须指定数组初始长度,且原生动态数组无法自动扩容,需要提前统计匹配元素个数或者手动实现扩容逻辑
  • 数组长度计算错误:函数形参中的int* array是指针类型,sizeof(array)/sizeof(array[0])计算得到的是指针本身的字节长度除以int类型长度,不是原数组的元素个数,需要额外传入数组长度参数
  • 返回值无法获取有效长度:返回的动态数组是指针类型,main函数中同样无法用sizeof计算元素个数,需要额外通过输出参数返回匹配元素的数量
  • 输出逻辑越界:就算数组长度计算正确,初始i等于元素个数的话,occArray[i]属于下标越界访问,数组下标从0开始,最后一个有效元素下标是长度-1
原生指针实现修复版
#include <iostream>
using namespace std;

// 新增参数:数组长度arrLen,输出参数count返回匹配的元素个数
int* linearSearch(int* array, int arrLen, int num, int& count) {
    // 第一遍遍历统计匹配的元素个数
    count = 0;
    for (int i = 0; i < arrLen; i++) {
        if (array[i] == num) count++;
    }
    if (count == 0) return nullptr;
    // 按匹配个数申请对应长度的动态数组
    int* occArray = new int[count];
    int idx = 0;
    // 第二遍遍历存储对应下标
    for (int i = 0; i < arrLen; i++) {
        if (array[i] == num) {
            occArray[idx++] = i;
        }
    }
    return occArray;
}

int main() {
    int array[] = {3,4,5,3,6,8,7,8,3,5}, num=5;
    // 原数组在定义的作用域内可以用sizeof计算长度
    int arrLen = sizeof(array)/sizeof(array[0]);
    int count = 0;
    int* occArray = linearSearch(array, arrLen, num, count);
    for (int i = 0; i < count; i++) {
        cout << occArray[i] << " ";
    }
    // 手动释放动态数组避免内存泄漏
    delete[] occArray;
    return 0;
}
std::vector实现版本(更简洁安全)

vector可以自动管理内存、自动扩容,不需要提前统计匹配长度,也不需要额外输出参数返回元素个数,直接调用size()方法即可获取匹配数量:

#include <iostream>
#include <vector>
using namespace std;

vector<int> linearSearch(int* array, int arrLen, int num) {
    vector<int> occArray;
    for (int i = 0; i < arrLen; i++) {
        if (array[i] == num) {
            occArray.push_back(i);
        }
    }
    return occArray;
}

int main() {
    int array[] = {3,4,5,3,6,8,7,8,3,5}, num=5;
    int arrLen = sizeof(array)/sizeof(array[0]);
    vector<int> occArray = linearSearch(array, arrLen, num);
    // 范围for循环遍历更简洁
    for (int idx : occArray) {
        cout << idx << " ";
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Roey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:36:04