合并两个vector遇问题:现有代码无输出,求排查及正确代码
问题排查与正确代码
你的代码核心问题是:空vector直接用下标赋值会触发未定义行为。v3默认初始化后是空的,没有分配任何内存空间,你用v3[i]去赋值时,访问的是不存在的内存位置,程序要么崩溃,要么没有输出。
下面是几种正确的实现方式:
方法1:先分配空间再赋值
先给v3分配足够容纳v1和v2所有元素的空间,再通过下标赋值:
#include<iostream> #include<vector> using namespace std; int main() { vector<int> v1={1,2,4,5}; vector<int> v2={10,9,6,3}; // 提前分配足够空间 vector<int> v3(v1.size() + v2.size()); int i=0; for(int value1:v1) { v3[i]=value1; i++; } for(int value2:v2) { v3[i]=value2; i++; } for(int value3:v3) { cout<<value3<<" "; } }
方法2:用push_back直接添加元素(最省心)
不需要手动管理下标,直接把元素逐个添加到v3末尾:
#include<iostream> #include<vector> using namespace std; int main() { vector<int> v1={1,2,4,5}; vector<int> v2={10,9,6,3}; vector<int> v3; // 预留空间可以提升效率(可选) v3.reserve(v1.size() + v2.size()); for(int value1:v1) { v3.push_back(value1); } for(int value2:v2) { v3.push_back(value2); } for(int value3:v3) { cout<<value3<<" "; } }
方法3:用insert成员函数(一行合并)
利用vector的insert方法直接批量插入元素,代码更简洁:
#include<iostream> #include<vector> using namespace std; int main() { vector<int> v1={1,2,4,5}; vector<int> v2={10,9,6,3}; vector<int> v3 = v1; // 把v2的所有元素插入到v3末尾 v3.insert(v3.end(), v2.begin(), v2.end()); for(int value3:v3) { cout<<value3<<" "; } }
内容的提问来源于stack exchange,提问作者Paras Jain
相关产品推荐
相关产品推荐

