在C++中如何通过void函数为vector填充数值?
问题根因
- 参数传递方式错误:
Fill_Vec函数的第一个参数为值传递,函数内部操作的是外部vector的临时副本,所有修改不会同步到main函数中的原始vector对象 - 越界访问:main函数中定义的vector默认大小为0,未分配存储空间的情况下直接通过
vec[i]访问对应下标位置,会触发内存越界错误
修复方案
将函数第一个参数改为引用传递,同时提前为vector分配对应大小的存储空间,修复后代码如下:
#include <iostream> #include <vector> using namespace std; // 加&将参数声明为引用,直接操作外部传入的原始vector void Fill_Vec(vector<int>& vec, int n){ vec.resize(n); // 分配n个元素的内存空间,支持下标访问 for(int i = 0; i < n; i++){ cin >> vec[i]; } } int main(){ int n; cin >> n; vector<int> vec; Fill_Vec(vec, n); // 如需验证填充结果可添加以下输出代码 // for (int num : vec) { // cout << num << " "; // } return 0; }
也可以选择使用push_back方法动态添加元素,无需提前resize:
void Fill_Vec(vector<int>& vec, int n){ int tmp; for(int i = 0; i < n; i++){ cin >> tmp; vec.push_back(tmp); } }
关键说明
- C++函数参数默认采用值传递,仅当参数声明为引用(加&)时,函数内部对参数的修改才会同步到外部实参
- 空vector不支持直接通过下标访问元素,必须先调用resize()分配指定容量,或通过push_back()在尾部动态追加元素
内容的提问来源于stack exchange,提问作者SuperPOTATO
相关产品推荐
相关产品推荐

