Как распечатать элементы 2d-вектора по вертикали в c ?

#c #c 17

Вопрос:

У меня есть простой вектор векторов целых чисел. Вывод приведенного ниже кода будет

 1 2 3 4 5 
6 7 8
9 10 11


 

Я пытаюсь понять, как добраться

 1 6 9
2 7 10
3 8 11
4
5
 
 int main() {
    using namespace std;
    vector<vector<int>> a  { {1,2,3,4,5}, {6,7,8}, {9,10,11} };
      for (int i = 0; i < a.size(); i  ) {

        for (int j = 0; j < a[i].size(); j   ) {
            
            cout << a[i][j] << " " ;
            
        }

        cout << endl;   
    }
    return 0;
};
 

Спасибо!

Комментарии:

1. Вам нужно всего лишь изменить два символа в вашем коде, вы можете определить, какие из них?

Ответ №1:

В этой строке: cout << a[i][j] << " " ; , вам просто нужно поменять i местами и j .

 #include <iostream>
#include <vector>
#include <cstddef> // for std::size_t
#include <algorithm>
// using namespace std; is bad, so don't use it.
int main() 
{
    std::vector<std::vector<int>> a  {{1,2,3,4,5}, {6,7,8}, {9,10,11}};
    std::size_t biggestSize{0};

    for(const auto amp;i : a) 
    {
        if(biggestSize < i.size())
        {
            biggestSize = i.size();
        }
    }
    for (std::size_t i {0}; i < biggestSize;   i) // size() returns a std::size_t type
    {
        for (std::size_t j {0}; j < a.size();   j) //use postfix increment opreator instead of prefix
        {
             if(i >= a[j].size())
             {
                 std::cout << "  ";
             }
             else
             {
                 std::cout << a[j][i] << ' ' ; // swap i and j
             }
        }
        std::cout << 'n'; //use newline character instead of std::endl  
    }
    return 0;
}
 

Комментарии:

1. Спасибо вам за ответ. Я получаю ошибку сегментации. Это потому, что вектор а в моей программе { { 1, 2, 3}, { 4,5,6,7,8,9,10}, {13,14} }. Никаких мыслей. Простая замена i на j не работает.

2. @YasiruLelwala Я обновил свой код для следующего. Скажи мне, есть ли какой-нибудь жучок.

3. for(auto amp;i : a) biggestSize = std::max(biggestSize, i.size(); ) На этой линии чего-то не хватает.

4. @justANewbie Я запустил ваш измененный код (также включающий изменения, внесенные гиком Linux) и протестировал его на векторе а { {1,2,3}, {4,5,6}, {7,8,9,10,11} }. У меня все еще есть ошибка сегментации.

5. @YasiruLelwala Извиняюсь за эту опечатку. Я думаю, что теперь я все исправил.

Ответ №2:

В строке 13 просто поменяйтесь I местами с J :

 cout << a[j][i] << " ";
 

Комментарии:

1. Спасибо вам за ответ. Я получаю ошибку сегментации. Это потому, что вектор а в моей программе { { 1, 2, 3}, { 4,5,6,7,8,9,10}, {13,14} }. Никаких мыслей. Простая замена i на j не работает.