簡體   English   中英

用C ++初始化2D向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM