我是第一次尝试使用向量。因此,为了进行实验,我创建了一个类,该类构造一个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]
的身份来访问。
答案 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;
}
}
}