在本示例中,如何更改二维std :: vector的逻辑,使其具有vector [row] [col]而不是vector [col] [row]?

时间:2019-05-25 15:00:46

标签: c++ vector 2d

我是第一次尝试使用向量。因此,为了进行实验,我创建了一个类,该类构造一个2d整数向量,并按从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;
}

我的问题是:如何修改该程序以使m_v[x][y]而不是m_v[y][x]基本上在向量中的行索引和列索引之间切换?

考虑x是行,y是列,如何使内部向量存储列而外部向量存储行呢?因为现在我必须以m_v[y][x]的身份访问坐标,但是我希望以m_v[x][y]的身份来访问。

1 个答案:

答案 0 :(得分:0)

为什么不只在构造函数中交换位置“ 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;
            }
        }
    }