#include <iostream>
#include <vector>
using namespace std;
int m,n;
vector<vector<int> > name(m,vector<int>(n));
int main()
{
cin>>m>>n;
for ( int i=0;i<m;i++)
{
for( int j=0;j<n;j++)
cin>>name[i][j];
}
}
每当我提供输入m
和n
时,它就会崩溃!我要做的是将输入提供给m
行和n
列的二维数组。
答案 0 :(得分:5)
在中读取m
和n
的值后,您需要初始化矢量(或调整其大小)。正如你所知,当初始化向量时,m
和n
为0 *,因此向量的大小为0.
*这只是因为你把它们放在全球范围内。如果放在一个函数中,它们将是未初始化的,并且使用它们的值将是未定义的行为
答案 1 :(得分:5)
因为你已经用完了界限。
name
向量是全局变量,因此它在程序启动时初始化,甚至在main
函数之前。整数全局变量也在C ++中用0
初始化。因此name
向量的大小为零。
在阅读n
和m
值后,您需要调整矢量大小。
答案 2 :(得分:1)
Error is you are trying to access the index out of bound
因为您的名字不是2D矢量。
使用此代码来使name
成为2D矢量。
vector < vector <int> > name;
vector<int > col;
int r, c;
void main()
{
cin >> r;
cin >> c;
for (int i = 0; i < c; i++)
{
col.push_back(i);//push i to col just to make it size of columns needed
}
for (int i = 0; i < r; i++)
{
name.push_back(col);//pushing vector col of size c into name to
//make it a 2D vecotr
}
//now name is a 2D vector with r rows of each c column
cout << "\nNow Enter values";
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
cin >> name[i][j];//input values
}
}
getch();
}