Как мне изменить логику двумерного std :: vector, чтобы в этом примере я использовал вектор [row] [col] вместо vector [col] [row]? - PullRequest
1 голос
/ 25 мая 2019

Я экспериментирую с векторами впервые.Итак, для эксперимента я создал класс, который создает двумерный вектор целых чисел и инициализирует их числами от 0 до 9.

Вот пример, который я создал:

#include <iostream>
#include <vector>

class VectorTest
{
private:
    std::vector< std::vector<int> > m_v;

public:
    VectorTest(int x, int y)
    {
        m_v.resize(y);
        for (auto &element : m_v)
            element.resize(x);

        int count {0};
        for (int i {0}; i < m_v.size(); ++i)
        {
            for (int j {0}; j < m_v[i].size(); ++j)
                m_v[i][j] = count++ % 10;
            }
        }
    }


    void print()
    {
        for (int i {0}; i < m_v.size(); ++i)
        {
            for (int j {0}; j < m_v[i].size(); ++j)
            {
                std::cout << m_v[i][j];
            }
            std::cout << '\n';
        }
    }

    void print(int x, int y)
    {
        std::cout << m_v[y][x];
    }

};

int main()
{
    VectorTest v(9, 9);
    v.print();
    std::cout << '\n';
    v.print (6, 4);

    return 0;
}

MyВопрос заключается в следующем: как я могу изменить эту программу, чтобы m_v[x][y] вместо m_v[y][x] в основном переключался на индексы строк и столбцов в векторе?

Учитывая, что x - это строка, а y - столбец, как я могу заставить внутренний вектор хранить столбцы, а внешний вектор - строки?Потому что сейчас я должен получить доступ к координатам как m_v[y][x], но я хотел, чтобы к нему обращались как m_v[x][y].

1 Ответ

0 голосов
/ 26 мая 2019

Почему бы просто не поменять местами "x" и "y" в конструкторе?Больше ничего не нужно.

Или я неправильно понял проблему?

    VectorTest(int x, int y)
    {
        m_v.resize(x /* was "y" */);
        for (auto &element : m_v)
            element.resize(y /* was "x" */);

        int count {0};
        for (int i {0}; i < m_v.size(); ++i)
        {
            for (int j {0}; j < m_v[i].size(); ++j)
                m_v[i][j] = count++ % 10;
            }
        }
    }
...