用派生类填充基类类型的2D矢量
Fill 2D Vector of type Base class with derived class
我有一个基类Organism,它有两个派生类Ant和Doodlebug。这是一个捕食问题。我想要一个基类类型的2d向量,但能够分配派生类的元素。其想法是,这将在一个20 X 20个字符的映射中表示世界的状态,如果元素是基,则字符为",而如果元素是派生的,则它将是不同的字符。
我读过关于如何在一维向量的情况下进行操作的文章,但我找不到声明指向二维向量的指针的正确语法。这是我所拥有的,如果我试图放置,我会出错:
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++;
}
不要忘记释放内存。当你使用这个向量的工作结束时,你必须释放内存,例如。
for (int i = 0; i < state.size(); ++i)
{
for (int j = 0; j < state[i].size(); ++j)
{
delete state[i][j];
}
}
或者使用迭代器或算法作为for_each索引
如果要使用智能指针,则不应释放内存。
相关文章:
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- 如何在 c++ 中格式化和访问 2D 矢量数组中的数据
- 读取字符串文本输入以创建 2D 矢量
- 识别 2D 矢量C++中的位置
- Cython:无法分配给 2D 矢量
- 按列随机播放 2D 矢量
- 初始化空的 2D 矢量?
- 如何在 2d 矢量 c++ 中复制元素并将其放在原始元素旁边
- 如何访问具有地图的2D矢量?
- 通过功能进行2D矢量输入和显示
- 在C++中将对象添加到 2D 矢量
- 太空入侵者 – 2D 矢量运动算法
- 从 2 个 1D 矢量创建 2D 矢量
- 如何仅使用其中一个维度在 2D 矢量中插入值?
- 在 2D 矢量中获取多个输入时出现问题
- 2D 矢量循环 C++
- C++ 2D 矢量到 2D pybind11 数组
- 在 2D 矢量数组中的特定标头下添加数据
- 在C++中使用 2D 矢量时出现明显的内存泄漏
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中