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

