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

我的C++向量合并程序存在哪些问题?

问题分析与修复

你的代码没达到预期效果,核心是三个关键问题:

1. 输入函数的参数传递错误

input_arr函数用的是值传递(vector<int> x),函数内操作的只是原向量的副本,你输入的元素根本没存到main里的a和b中,导致后续合并时两个向量都是空的。

要改成引用传递,让函数直接操作原向量:

void input_arr(vector<int>& x) { // 加&改为引用传递
    cout << "Kitne elements: ";
    int n;
    cin >> n;

    for (int i { 0 }; i < n; ++i) {
        cout << ": ";
        int nm;
        cin >> nm;
        x.push_back(nm);
    } 
}

2. 合并函数的元素读取错误

aunio函数的第二个循环里,你把索引值(i - x.size())塞进了union_arr,而不是y向量里的实际元素。正确写法应该读取y对应位置的元素:

void aunio(vector<int> x, vector<int> y, vector<int>& union_arr) {
    for (int num : x) { // 用范围for循环更直观
        union_arr.push_back(num);
    } 
    for (int num : y) {
        union_arr.push_back(num);
    }
}

3. 全局变量的不必要使用(可选优化)

全局变量union_arr容易引发意外问题,建议改成在main里定义,通过引用传递给aunio函数,避免全局作用域的干扰。

修复后的完整代码

#include <iostream>
#include <vector>
using namespace std;

void input_arr(vector<int>& x) {
    cout << "Kitne elements: ";
    int n;
    cin >> n;

    for (int i { 0 }; i < n; ++i) {
        cout << ": ";
        int nm;
        cin >> nm;
        x.push_back(nm);
    } 
}

void aunio(vector<int> x, vector<int> y, vector<int>& union_arr) {
    for (int num : x) {
        union_arr.push_back(num);
    } 
    for (int num : y) {
        union_arr.push_back(num);
    }
}

int main() {
    vector<int> a;
    vector<int> b;
    vector<int> union_arr;

    input_arr(a);
    input_arr(b);

    aunio(a, b, union_arr);

    cout << "Union Array:" << endl << "[";
    for (size_t i { 0 }; i < union_arr.size(); ++i) {
        if (i > 0) cout << " "; // 优化输出格式,避免末尾多余空格
        cout << union_arr[i];
    } 
    cout << "]";
} 

修改后程序会正确读取两个输入向量的所有元素,合并成允许重复元素的union_arr。

内容的提问来源于stack exchange,提问作者PRAJWAL KAMBALE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:22:47