C++实现数组拆分最大和时binary expression报错如何解决
错误根因
- 直接报错原因:
std::sort要求传入两个迭代器标识排序区间,你代码中的nums是vector<int>容器对象,不是原生数组指针,不支持直接和整数做加法运算,因此nums + 2 * n是非法表达式。 - 额外隐藏问题:
- 成员变量
n未初始化,数组长度应该通过nums.size()方法直接获取,无需额外定义变量存储 - 循环变量
i未声明类型,不符合C++语法要求 sum定义为类成员变量,多次调用arrayPairSum方法时会残留上一次的计算结果,导致返回值错误
- 成员变量
修正后的完整代码
class Solution { public: int arrayPairSum(vector<int>& nums) { sort(nums.begin(), nums.end()); int sum = 0; for (int i = 0; i < nums.size(); i += 2) { sum += nums[i]; } return sum; } };
修改点说明
- 排序逻辑改用vector的迭代器作为入参,
nums.begin()指向数组首元素,nums.end()指向数组尾后位置,符合std::sort的参数要求 - 删除无用的类成员变量
sum、n,将sum改为方法内的局部变量,避免多次调用的结果污染 - 补充循环变量
i的类型声明,修正循环边界判断逻辑,直接用nums.size()获取数组总长度
内容的提问来源于stack exchange,提问作者Noob_coder
相关产品推荐
相关产品推荐

