嵌套 std::vector 的等效类矩阵 C 数组是什么?

What is the equivalent matrix-like C-array of a nested std::vector?

什么是嵌套的等效类矩阵 C 数组 std::vector?

例如如果我们想将 std::vector<std::vector<int>> 视为 int arr[n][m],其中 n 是外部向量的维度,m 是内部向量的维度?

根据评论中的其他信息,我建议您改为这样做:

class TwoDimVector {
 public:
  TwoDimVector(int num_cols, int num_rows)
      : m_num_cols(num_cols)
      , m_num_rows(num_rows)
      , m_data(m_num_cols * m_num_rows, 0)
  { }

  int & ix(int row, int col) {
     return data[num_cols * row + col];
  }


  const int m_num_rows;
  const int m_num_cols;
 private:
  std::vector<int> m_data;
}

当您处理嵌套向量时,会发生很多额外的工作。此外,对于嵌套向量,数据不连续,因此很难使用任何 C-api。注意这个数据结构,大小在构造时是固定的并且可以访问。这被设计为连续的行,因此对于 C 互操作性,您可以像这样访问额外的原始指针:

TwoDimVector tdv(4,3);
int * raw = &tdv.ix(0,0);
int * raw_second_row = &tdv.ix(1,0);

请注意:如果将 this 传递给函数,请务必按引用传递:

void do_work(TwoDimVector & tdv) {
  ...
}

如果您不通过引用传递,它将复制所有内容,这是一堆(通常是不必要的)工作。

也许,这段代码

  void translate(const vector< vector >& vec){

int m = vec.size(), n = 0;

for (vector<int>& deep : vec) // search maximum size if nested vectors
{
    if (deep.size() > n)
        n = deep.size();
}

int arr[m][n];

m = n = 0;
for (vector<int>& deep : vec){
    for (int& x : deep)
    {
        arr[m][n] = x;
        ++n;
    }

    ++m;
}

// So, I really don't know how you can return this array :( }

你看,它的代码很糟糕,你不能这样做!!!
如果你在 C++ 上编写,你应该使用 std::vector - 它更容易。 C-like 数组是 C 的遗产,你不应该使用它们