为何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
相关产品推荐
相关产品推荐

