我的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
相关产品推荐
相关产品推荐

