You need to enable JavaScript to run this app. C++ 函数返回vector后正确接收打印及越界错误排查
优惠活动
大模型
产品
解决方案
定价
更多

C++ 函数返回vector后正确接收打印及越界错误排查

问题原因

1. 数组越界的核心错误

你的内层循环变量写错了,所有操作都误用了外层的i而不是新建的j:
原内层循环代码:

for(int j=i+1;i<array.size();i++)

这里循环判断条件写的是i < array.size(),迭代变量也是i++,会导致外层的i被意外持续累加,很快超过数组下标范围,触发越界访问。

2. 返回值未接收

你当前在main函数里直接调用twoNumberSum(test,tSum);,没有用变量承接返回的vector,后续自然没法操作返回结果。

修复步骤

  • 先修正内层循环的变量,全部改用j控制内层迭代
  • 调用函数时用同类型的vector<int>承接返回值
  • 打印vector时可以遍历元素输出,建议先判断是否为空再输出,避免访问空容器的下标
  • 补充找不到匹配项时的空返回处理逻辑

完整修正后的代码

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

vector<int> twoNumberSum(vector<int> array, int targetSum);

int main()
{
  int tSum = 10;
  vector<int> test{3,5,-4,8,11,1,-1,6};
  // 接收返回的vector
  vector<int> result = twoNumberSum(test, tSum);
  // 打印内容
  cout << "[";
  for (size_t k = 0; k < result.size(); k++) {
    if (k != 0) cout << ",";
    cout << result[k];
  }
  cout << "]" << endl;
  return 0;
}

// O(n²)复杂度 两数之和
vector<int> twoNumberSum(vector<int> array, int targetSum)
{
  for (int i=0; i < (int)array.size() - 1; i++)
  {
    int firstNum = array[i];
    // 修正内层循环变量为j
    for(int j = i+1; j < array.size(); j++)
    {
      int secondNum = array[j];
      if(firstNum + secondNum == targetSum)
      {
        return vector<int>{firstNum, secondNum};
      }
    }
  }
  return {};
}

补充说明

如果使用C++11及以上版本,打印vector还可以用范围for循环简化写法:

cout << "[";
bool first = true;
for (auto num : result) {
  if (!first) cout << ",";
  first = false;
  cout << num;
}
cout << "]" << endl;

运行修正后的代码会输出[11,-1],为符合输入参数的正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:54:04