我有一个基类,有机体,有2个派生类,Ant和Doodlebug。这是捕食者 - 猎物的问题。我想要一个Base类的2d向量,但能够分配派生类的元素。这个想法是,这将代表20 X 20字符映射中的世界状态,如果元素是基础,则char是'',而如果元素是派生的,它将是不同的char。
我读过如果它的一维向量如何做,但我找不到声明指向2d向量的指针的正确语法。这就是我所拥有的,如果我试图放错,我就会出错:
vector < vector<Organism*> > state(20, vector<Organism*>(20));
但是这是编译的,但打印出一个数字字段而不是字符:
vector < vector<Organism> > state(20, vector<Organism>(20));
string line;
int stateline = 0;
while(getline(ini_state_file, line))
{
for(int i = 0; i < line.size(); i++)
{
if(line[i] == 'o')
state[stateline][i] = Ant();
else if(line[i] == 'X')
state[stateline][i] = Doodlebug();
}
stateline++;
}
答案 0 :(得分:5)
// or some smart_ptr instead native pointer.
vector<vector<Organism*> > state(20, vector<Organism*>(20));
string line;
int stateline = 0;
while(getline(ini_state_file, line))
{
for(int i = 0; i < line.size(); i++)
{
if(line[i] == 'o')
state[stateline][i] = new Ant();
else if(line[i] == 'X')
state[stateline][i] = new Doodlebug();
}
stateline++;
}
不要忘记释放记忆。当您使用此向量的工作结束时,您必须释放内存,例如。
for (int i = 0; i < state.size(); ++i)
{
for (int j = 0; j < state[i].size(); ++j)
{
delete state[i][j];
}
}
或者使用迭代器或算法作为for_each而不是索引。
如果你想使用智能指针,你就不应该释放内存。