pos*_*ich 0 c++ vector derived-class
我有一个基类,有机体,有2个派生类,Ant和Doodlebug.这是捕食者 - 猎物的问题.我想要一个Base类的2d向量,但能够分配派生类的元素.这个想法是,这将代表20 X 20字符映射中的世界状态,如果元素是基础,则char是'',而如果元素是派生的,它将是不同的char.
我读到了如果它的一维向量如何做,但我找不到正确的语法来声明指向2d向量的指针.这就是我所拥有的,如果我试图放入,我会遇到错误:
vector < vector<Organism*> > state(20, vector<Organism*>(20));
Run Code Online (Sandbox Code Playgroud)
但这是编译但打印出一个数字字段而不是字符:
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++;
}
Run Code Online (Sandbox Code Playgroud)
// 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++;
}
Run Code Online (Sandbox Code Playgroud)
不要忘记释放记忆.当您使用此向量的工作将结束时,您必须释放内存,例如.
for (int i = 0; i < state.size(); ++i)
{
for (int j = 0; j < state[i].size(); ++j)
{
delete state[i][j];
}
}
Run Code Online (Sandbox Code Playgroud)
或者使用迭代器或算法作为for_each而不是索引.
如果你想使用智能指针,你就不应该释放内存.