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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:15:01