使用派生类填充Base类的2D Vector

时间:2012-07-10 16:29:55

标签: c++ vector derived-class

我有一个基类,有机体,有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++;
}

1 个答案:

答案 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而不是索引。
如果你想使用智能指针,你就不应该释放内存。