如何用C++实现按2个A数组元素+1个B数组元素填充目标数组?
如何修改C++代码实现按规则合并两个数组?
嘿,我来帮你搞定这个数组合并的问题!先明确需求,再梳理原代码的问题,最后给出完整的修改方案:
需求回顾
我们需要按照每2个数组A的元素后跟随1个数组B的元素的规则合并两个数组:
- 测试用例:
- 数组A:
[10,15,7,19,6,24,12,2,18] - 数组B:
[13,21,5,3,14,9,17] - 预期结果:
[10,15,13,7,19,21,6,24,5,12,2,3,18,14,9,17]
- 数组A:
原代码的问题
你的代码目前只完成了数组的输入初始化,还存在几个关键问题:
- 读取数组B时循环条件错误:用了
i < m(数组A的长度),应该是i < n(数组B的长度),否则会导致数组越界 - 使用了非标准的变长数组(VLAs):
int a[m]这种写法在C++标准中是不被支持的,仅部分编译器扩展支持,可移植性差 - 完全没有实现核心的合并逻辑,也没有输出结果
修改后的完整代码
#include <iostream> #include <vector> // 使用vector替代变长数组,符合C++标准 using namespace std; int main() { int m, n; cout << "please enter size of array A (M): "; cin >> m; cout << "please enter size of array B (N): "; cin >> n; // 用vector存储数组A和B,避免非标准的变长数组 vector<int> a(m); for (int i = 0; i < m; ++i) { cout << "enter element " << i << " of array A: "; cin >> a[i]; } vector<int> b(n); // 修正循环条件:遍历数组B的所有元素 for (int i = 0; i < n; ++i) { cout << "enter element " << i << " of array B: "; cin >> b[i]; } // 结果数组,用vector自动管理内存 vector<int> c; int idx_a = 0, idx_b = 0; // 核心合并逻辑:按规则交替取元素 while (idx_a < m || idx_b < n) { // 先取最多2个数组A的元素(如果还有剩余) for (int count = 0; count < 2 && idx_a < m; ++count) { c.push_back(a[idx_a++]); } // 再取1个数组B的元素(如果还有剩余) if (idx_b < n) { c.push_back(b[idx_b++]); } } // 打印结果数组 cout << "\nResult array: ["; for (size_t i = 0; i < c.size(); ++i) { if (i > 0) cout << ", "; cout << c[i]; } cout << "]" << endl; return 0; }
关键修改说明
- 替换变长数组为vector:
vector是C++标准容器,自动管理内存,避免了变长数组的兼容性问题 - 修正数组B的循环条件:确保遍历数组B的所有元素,不会出现越界或遗漏
- 实现核心合并逻辑:
- 用两个索引
idx_a和idx_b分别跟踪A、B数组的当前位置 - 每次循环先取最多2个A的元素,再取1个B的元素,直到两个数组都遍历完毕
- 自动处理边界情况:比如A剩余元素不足2个时,取完剩余的A元素;B已经遍历完时,直接追加剩余的A元素
- 用两个索引
- 添加结果输出:新增了结果数组的打印功能,方便验证输出是否符合预期
测试验证
输入你提供的测试用例:
- 数组A长度9,元素依次为
10,15,7,19,6,24,12,2,18 - 数组B长度7,元素依次为
13,21,5,3,14,9,17
运行代码后会输出你预期的结果数组。
内容的提问来源于stack exchange,提问作者saeed kazemi
相关产品推荐
相关产品推荐

