0

我有一个函数,它接受行数和列数,并使用对象“单元”的默认值初始化向量向量,并返回指向该向量的指针。

//Cell class
class cell{
public:
    int cost, parent;
    cell(int cost = 0, int parent = 0) : cost(cost), parent(parent){}
}

//The initialisation function
vector<vector<cell> >*  init_table(int n_rows, int n_cols){
    //Error line
    vector<vector<cell> >* table = new vector<vector<cell>(n_cols)> (n_rows);

    //Some(very few) special cells need a different value so I do that here

    return table; //Return the pointer
}

似乎编译器解析 (n_cols)> (n_rows) 就像 > 操作,而不是创建单元对象的 n_cols 副本和向量对象的 n_rows 副本。如何在不手动循环并推送向量中的默认值单元格的情况下初始化向量?

4

2 回答 2

1

由于 C++ 编译器通常有返回值优化,你可以简单地做

vector<vector<cell> >  init_table(int n_rows, int n_cols)
{
    return vector<vector<cell> >(n_rows, vector<cell>(n_cols));
}

和写作

vector<vector<cell> > my_table = init_table(int n_rows, int n_cols);

将与“新”向量一样有效,但这更安全。

于 2012-12-08T08:59:32.263 回答
0

哦,我现在明白了。我应该通过它的构造函数用内部向量初始化外部向量

vector<vector<cell> >* table = new vector<vector<cell> > (n_rows, vector<cell>(n_cols));

而不是作为模板参数。它现在正在工作。

于 2012-12-08T08:16:04.037 回答