[英]Initialization 2D Vector in C++
我想通過2D向量從用戶那里獲取2D矩陣的輸入。 但是,當我像下面那樣工作時,程序崩潰了!!! 但為什么?
int m, n;
cin>>m>>n;
vector<vector<int> > v;
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
int a;
cin>>a;
v[i].push_back(a);
}
}
根據我的代碼,解決方案是什么?
在v[i].push_back(a);
在for
循環中被調用,向量v
為空,並且使用v[i]
會導致不確定的行為。
您的代碼應首先push_back
一個vector<int>
:
for (int i=0; i<m; i++)
{
v.push_back(vector<int>());
for (int j=0; j<n; j++)
{
int a;
cin >> a;
v[i].push_back(a);
}
}
一種替代方法是將向量v
顯式初始化為大小m
:
int m, n;
cin>>m>>n;
vector<vector<int> > v(m);
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
int a;
cin>>a;
v[i].push_back(a);
}
}
由於您知道矩陣的大小,因此只需在填充前調整v的大小即可:
vector<vector<int> > v(m);
for(int i=0; i<m; i++)
{
v[i].resize(n);
for(int j=0; j<n; j++)
{
cin >> v[i][j];
}
}
調用v [i] .push_back()時尚未構建v [i],只需要首先初始化v。這很簡單:
vector<vector<int>> v;
v.reserve(m);
for(...)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.