我有一个基类 Organism,它有两个派生类 Ant 和 Doodlebug。这是针对捕食者-猎物问题。我想要一个 Base 类类型的二维 vector ,但能够分配派生类的元素。这个想法是,这将在 20 X 20 字符映射中表示世界的状态,其中如果元素是基础,则字符为 ' ',而如果元素是派生的,它将是不同的字符。
我阅读了有关如何处理一维 vector 的信息,但我找不到声明指向二维 vector 的指针的正确语法。这就是我所拥有的,如果我尝试输入会出错:
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++;
}
最佳答案
// 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++;
}
不要忘记释放内存。当您使用此 vector 的工作结束时,您必须释放内存,例如。
for (int i = 0; i < state.size(); ++i)
{
for (int j = 0; j < state[i].size(); ++j)
{
delete state[i][j];
}
}
或者使用迭代器或算法作为 for_each 而不是索引。
如果你想使用智能指针,你不应该释放内存。
关于c++ - 用派生类填充基类类型的二维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11417772/