Ты почти там; но вы читаете N после , используя его. Программа на C ++ выполняется построчно, поэтому, когда дело доходит до new vector <int> [N]
, значение N
еще не читается! В терминах C ++ вы затем используете неинициализированную переменную , которая является формой неопределенного поведения . В C ++, в отличие от большинства других языков, очень просто написать бессмысленную программу, и компилятор не остановит вас (хотя может выдать предупреждение - обратите внимание на это!).
Если вы переместитесь cin >> N;
до new vector <int> [N]
, тогда это будет работать лучше, но подождите, есть лучшее решение ...
Вместо необработанных массивов, более идиоматично c иметь вектор векторов. Это безопаснее и проще:
std::vector<std::vector<int>> arr;
int n;
cin >> n;
arr.resize(n);
Или просто объявить вектор после того, как n
известен:
int n;
cin >> n;
std::vector<std::vector<int>> arr(n);