#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
, он падает! То, что я пытаюсь сделать, состоит в том, чтобы дать ввод в 2-мерный массив из m
строк и n
столбцов.
Вам нужно инициализировать свой вектор (или изменить его размер) после чтения значений для m
и n
. Поскольку у вас это есть, m
и n
равны 0 *, когда вектор инициализируется, поэтому размер вектора равен 0.
* Это только тот случай, потому что вы разместили их в глобальном масштабе.если они помещены в функцию, они будут неинициализированы, и было бы неопределенным поведением использовать их значения
Из-за того, что вы исчерпали границы.
name
вектор является глобальным переменным, поэтому она инициализируется в момент запуска программы, еще до main
функции. Также целые глобальные переменные инициализируются с помощью 0
в C++. Таким образом, вектор name
имеет нулевой размер.
После чтения значений n
и m
вам нужно изменить размер вектора.
Error is you are trying to access the index out of bound
Потому что ваше имя не является двумерным вектором.
использовать этот код вместо того, чтобы сделать 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();
}
m
иn
изcin
, внутриmain
функции.