输出2d向量的语法

时间:2018-02-02 21:21:50

标签: c++ vector

如果我有一个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;}
}

1 个答案:

答案 0 :(得分:3)

您的代码无法正常工作的原因是您没有为矢量分配任何内存。将向量的声明更改为:

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数组的更多信息。