假设我有Int的二维向量:
vector <vector<Int> > myV;
然后定义2个变量:
int rows; //number of vectors in myV. This is the my y(vertical) index.
int columns; //number of elements in one vector within myV. x index.
我想知道何时将myV像矩形一样输出:遍历myV [something] [something],哪个变量应该放在左括号中,哪个应该正确?我只希望变量完全符合我的意图。
我还编写了一个测试代码,但是它存在细分错误,但我还没有弄清楚为什么。
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<vector<int> > myV;
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
myV[i][j] = j;
}
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++)
cout << myV[i][j] << " ";
cout << endl;}
}
最佳答案
您的代码无法正常工作的原因是,您尚未为向量分配任何内存。将向量的声明更改为:
vector<vector<int>> myV(3, vector<int>(3));
附带一提,我什至会考虑将数组存储在一个维度(即
std::vector<int> myV(9);
)中,并使用函数getIndex
计算用于多维使用的索引,该函数可以实现为:inline std::vector<int>::size_type getIndex(int numCols, int i, int j)
{
return i * numCols + j;
}
该功能的用法如下所示:
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++i)
{
myV[getIndex(3, i, j)] = /* Value */;
}
}
这将避免大量使用多维矢量所需的内存,并且将允许以几乎相同的方式使用。
以下是一些further reading信息,详细说明了为什么应该使用1d数组表示2d数组。