如何将多维std::vector
转换为相应的多维C数组?
例如 std::vector<std::vector<int>>
到int arr[n][m]
,其中n
是外部向量的维度和内部向量的m
?
答案 0 :(得分:2)
根据评论中的其他信息,我建议你做一些这样的事情:
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-apis。请注意,使用此数据结构时,大小在构建时固定且可访问。这被设计为行连续,因此对于C互操作性,您可以访问额外的原始指针,如下所示:
TwoDimVector tdv(4,3);
int * raw = &tdv.ix(0,0);
int * raw_second_row = &tdv.ix(1,0);
请注意:如果将其传递给函数,请务必通过引用传递:
void do_work(TwoDimVector & tdv) {
...
}
如果您没有通过引用传递,它将复制所有内容,这是一堆(通常是不必要的)工作。
答案 1 :(得分:0)
也许,这段代码
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类阵列是C的遗产,你不应该使用它们