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

使用C++调整数组长度至相同并实现数组元素求和

修正C++数组长度对齐及对应元素求和的代码

修正后的完整代码

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> arrayOne = {1,2,3,4,5,6,7};
    vector<int> arrayTwo = {8,5,6,4,5,6,4};
    vector<int> arrayThree;

    int a = arrayOne.size();
    int b = arrayTwo.size();

    if(a != b){
        if(a > b){ 
            int diff = a - b;
            // 向较短数组添加元素,此处默认补0,可按需修改填充值
            for(int k=0; k < diff ; k++ ){ 
                arrayTwo.push_back(0);
            }
        }
        else{
            int diff = b - a;
            for(int k=0; k < diff ; k++ ){ 
                arrayOne.push_back(0);
            }
        }
        // 更新为对齐后的数组长度
        a = arrayOne.size();
    }

    // 对应元素求和
    arrayThree.reserve(a);
    for (int i=0; i < a; i++)
    {
        arrayThree.push_back(arrayOne[i] + arrayTwo[i]);
    }

    // 输出结果
    for(int num : arrayThree){
        cout << num << endl;
    }

    return 0;
}

原代码的核心问题及修正说明

  • 静态数组无法动态扩展:原代码中int arrayOne[]这类静态数组的内存大小编译期就固定,直接访问arrayTwo[b+k]属于越界操作,会触发未定义行为。改用std::vector可以通过push_back()安全动态扩容,自动管理内存。
  • 空数组越界赋值:int arrayThree[] = {}是长度为0的静态数组,后续arrayThree[i]赋值会直接越界。用vector的push_back()可避免该问题。
  • 循环逻辑错误:原循环for(int k=0; i < k ; k++ )中,i未定义且循环条件写反,修正为k < diff来循环对应次数。
  • 长度未同步更新:原代码扩展数组后未更新a/b的值,导致求和循环仍使用原长度,修正后需重新获取vector的实际长度。
  • 索引计算错误:原代码中扩展数组时手动计算索引易出错,vector的push_back()无需手动处理索引,避免了此类错误。

注:若需要按照原代码思路用b+k这类值填充扩展元素,只需将push_back(0)替换为对应表达式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:25:25