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
相关产品推荐
相关产品推荐

