我有一个函数,它接受行数和列数,并使用对象'cell'的默认值初始化vector的向量,并返回指向该向量的指针。
//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)&gt; (n_rows)喜欢&gt;操作而不是创建单元对象的n_cols副本和向量对象的n_rows副本。如何在不手动循环并推送向量中的默认值单元格的情况下初始化向量?
答案 0 :(得分:1)
由于C ++编译器通常具有return value optimization,因此您只需执行
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);
与“新”一样有效 - 矢量,但这更安全。
答案 1 :(得分:0)
哦,我现在明白了。我应该使用内部向量初始化外部向量,通过它的构造函数,如
vector<vector<cell> >* table = new vector<vector<cell> > (n_rows, vector<cell>(n_cols));
而不是模板参数。它现在正在运作。