c++ - 用派生类填充基类类型的二维 vector

标签 c++ vector derived-class

我有一个基类 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/

相关文章:

返回实例变量的 c++ 方法可以访问变量中的数据但不能更改它,但编译时不会产生错误

c++ - C++ std::vector 的两个指针替代方案

r - 错误: requires numeric/complex matrix/vector arguments when using matrix times vector multiplication

c++ - 如何安全地删除 std::vector 中的元素

c++ - 从基类型的函数返回派生类对象

c++ - 错误 : type ‘class’ is not a direct base of ‘class’

c++ - 这个函数调用会被g++优化吗?

c++ - 是否有不是以 C/C++ 风格编写的 OpenCL 绑定(bind)?

c++ - 按值传递基元

c++ - 基类中的派生类实例