Вывод двумерного vector< vector<int>>

218
05 октября 2017, 13:42

Почему все элементы выводтся в столбец. Если мы сначала в i кладем vector. А во вложенном цикле j это int;

int main(){
    vector< vector<int>> v;
    int n ;
    cin >> n;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n ; j++)
            v.emplace_back(vector<int>()), v[v.size() - 1].emplace_back(j);
    for (auto i:v){
        for(auto j:i)
            cout << j << " ";
        cout << "\n";
    }
    return 0;
}

Вывод при n = 5:

0 
1 
2 
3 
4 
0 
1 
2 
3 
4 
0 
1 
2 
3 
4 
0 
1 
2 
3 
4 
0 
1 
2 
3 
4 
Answer 1

Потому что вместо того, чтобы создать n векторов с n значениями, вы создали n х n векторов с одним значением. Поэтому код вывода и показывает n х n векторов с одним элементом.

Answer 2

Перенесите создание внешнего вектора в первый цикл

#include <iostream>
#include <vector>
using namespace std;
int main(){
 vector<vector<int>> v;
 int n = 2;
 for(int i = 0; i < n; i++){
  v.emplace_back(vector<int>());
  for(int j = 0; j < n ; j++){
   v[v.size() - 1].emplace_back(j);
  }
 }
 for (auto i:v){
  for(auto j:i)
   cout << j << " ";
  cout << "\n";
 }
 return 0;
}
READ ALSO
Кросс-компиляция приложения на C++ с Qt с Linux под Windows

Кросс-компиляция приложения на C++ с Qt с Linux под Windows

Здравствуйте! Я начинающий программист и недавно использую QtНе могу разобраться с компиляцией приложения на C++ с использованием Qt

356
Как можно изменить код?

Как можно изменить код?

Задание:Структура с именем TRAIN поля: -название пункта назначения; -номер поезда; -время отправления Способ обработки – вывод на дисплей результата...

313
Нужно убрать первый символ строки

Нужно убрать первый символ строки

Есть программа, которая в цикле сравнивает строки, всё в ней работает, но в итоге превышается тайм лимит на 0,001 - 0,007 секундыРешил с каждой итерацией...

246
Как сделать таймер на C++

Как сделать таймер на C++

Делаю игру змейку, изучая ООП C++, и есть код:

295