C++矢量,擦除不理解
C++ vector, erase don't understand
在我的roguelike RPG项目中,我使用矢量来保持所有怪物的多态指示器,抽象类Mob的一部分。问题是在战斗中——有一个函数返回迭代器,选择我们正在攻击的nob(我跳过了测试,以防这里没有怪物,它返回vector的begin)。
vector<Mob*>::iterator Hero::TryAttack(vector <Mob*> monsters)
{
int trying_x = pos_x, trying_y = pos_y;
switch (DIR)
{
case UP: trying_y--;
case DOWN: trying_y++;
case LEFT: trying_x--;
case RIGHT: trying_x++;
}
if (!monsters.empty())
{
for (vector <Mob*>::iterator i = monsters.begin(); i != monsters.end(); i++)
{
if ((*i)->pos_x == trying_x && (*i)->pos_y == trying_y)
{
return i;
}
}
}
return monsters.begin();
}
当我调用这个函数时:
switch (hero.CheckAction())
{
case ATTACK:
{
//delete rat3;
if(!monsters.empty())
monsters.erase(hero.TryAttack(monsters));
test_map.Draw(monsters, NPCs);
break;
}
default: break;
}
there's poping assertion failure:img
我知道erase返回删除后的下一个元素,但我怎么能删除只有一个现有的元素在vector?
Hero::TryAttack(vector <Mob*> monsters)
按值传递monsters
。返回的迭代器指向vector不存在的副本。通过引用传递:
Hero::TryAttack(vector <Mob*>& monsters)
相关文章:
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 当我不关心顺序并且没有重复项时,更快的擦除删除成语?
- 为什么在功能内擦除元素后不列出更新?
- 如何在 c++ 中打开文件,而不擦除其内容而不附加它?
- 矢量擦除错误,无法删除不完整的类型
- C++矢量 - 放置/擦除不起作用?(多态性)
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 擦除() 不起作用C++
- 迭代器擦除矢量中的元素无效,但它不会崩溃
- C++ cout 在擦除换行符后打印字符串不正确
- 插入排序与插入/擦除?(所以我需要对一个向量进行排序,而不是手工做事,而是使用插入和擦除
- C++ std::set::擦除不起作用
- 为什么不擦除矢量内容
- 如何通过长度从 std::vector 中删除元素<string>(擦除不起作用)
- 如何不擦除迭代器(从"Effective STL")
- C++ map::erase() 不会擦除数据
- STL 映射不会擦除
- vector::erase不会擦除所需的元素,而是从向量中擦除最后一个元素
- C++矢量,擦除不理解
- 删除两个向量中的公共对象/在一个向量中获取重复对象(不是擦除)