Задать вопрос
lleviy
@lleviy

Как оптимально считать матрицу с консоли c++?

Требуется считать матрицу с консоли, на вход подается:
2 2
1 3
4 5

, где первая строка это количество строк и столбцов, все последующие - сама матрица.

Я пытался сделать так. Вылетает ошибка сегментации еще на строчке с getline (подозреваю, что и дальше тоже вылетит ошибка в попытке запушить в g[i]).
int main() {
    int n, k;
    char *str;
    vector < vector<int> > g;
    cin >> k >> n;
    for (int i = 0; i < k; i++) {
        cin.getline(str, n * 2 - 1);
        for (int j = 0; j < n * 2 - 1; j=j*2){
            g[i].push_back(atoi(reinterpret_cast<const char *>(str[j])));
        }
    }
}


Может есть более простой способ сделать это? И можете объяснить, почему getline дает ошибку сегментации, вроде с кодом все нормально до этого момента.
  • Вопрос задан
  • 831 просмотр
Подписаться 1 Простой Комментировать
Решение пользователя TriKrista К ответам на вопрос (3)
@TriKrista
вы, скорей всего, не правильно используете метод cin.getline
вот первая ссылка по этому вопросу

И еще вы обращаетесь в недоступный для записи участок памяти:
g[i].push_back(...
Для решения второй проблемы можно предварительно выделить память для вектора при помощи метода reserve()

или переписать часть кода как то так:
vector<int> v;
for (int j = 0; j < n * 2 - 1; j=j*2){
     v.push_back(atoi(reinterpret_cast<const char *>(str[j])));
}
g.push_back(v);
Ответ написан
Комментировать