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

为何C++二维vector无法像一维vector直接赋值?报错原因及资料咨询

二维vector直接用v[i][j]赋值报错的原因及解决方法

报错原因

你定义的vector<vector<int>> v是一个空的二维容器,它内部没有任何子vector。当你尝试用v[i][j]赋值时,v[i]会试图访问第i个位置的子vector,但这个位置根本不存在,相当于引用了空指针,因此触发了运行时错误。

为什么一维vector和二维数组可以直接赋值?

  • 一维vector:只有当你预先指定了大小(比如vector<int> a(n)),容器才会分配对应数量的内存空间,此时a[i]才能合法访问并赋值。如果是空的一维vector直接用a[i] = value,同样会报错。
  • 二维数组:比如int arr[3][4],在声明时就已经固定分配了3×4的内存空间,每个位置都有对应的内存地址,因此可以直接赋值。

正确的实现方式

方法1:预先初始化二维vector的大小

在声明时就指定外层vector的元素个数,以及每个子vector的大小:

#include<iostream>
#include<vector>
using namespace std;
int main(){
    int n = 3,m = 4,num;
    // 预先初始化n个大小为m的子vector
    vector<vector<int>> v(n, vector<int>(m));
    for(int i=0;i < n;i++){
        for(int j=0;j<m;j++){
            cin>>num;
            v[i][j] = num;
        }
    }
    for(int i=0;i < n;i++){
        for(int j=0;j<m;j++){
            cout<<v[i][j]<<" ";
        }
        cout<<endl;
    }
}

方法2:动态添加子vector和元素

保持空的二维vector,先为外层vector添加空的子vector,再向子vector中添加元素:

#include<iostream>
#include<vector>
using namespace std;
int main(){
    vector<vector<int>> v;
    int i,j,n = 3,m = 4,num;
    for(i=0;i < n;i++){
        // 先添加一个空的子vector
        v.push_back(vector<int>());
        for(j=0;j<m;j++){
            cin>>num;
            // 向当前子vector末尾添加元素
            v[i].push_back(num);
        }
    }
    for(i=0;i < n;i++){
        for(j=0;j<m;j++){
            cout<<v[i][j]<<" ";
        }
        cout<<endl;
    }
}

内容的提问来源于stack exchange,提问作者Md Daniyalur Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:48:22