【发布时间】:2014-04-18 15:06:35
【问题描述】:
我目前正在为带有 2D 地图的控制台编写一个小游戏。我的游戏的 2 个元素是:摧毁田野和一个敌人,它以随机的方向传播(它越来越大)。这两个“实体”保存在一个包含两个向量(X 和 Y)的结构中。我现在正在尝试删除“_Enemy”的元素(
我尝试了很多不同的变体来做到这一点,而这种方法给我的错误最少的是这种方法(我已经在互联网上搜索了一段时间,但找不到我的问题的答案):
for (std::vector<int>::iterator itEX = _Enemys.X.begin(), itEY = _Enemys.Y.begin();
itEX != _Enemys.X.end() && itEY != _Enemys.Y.end();
++itEX, ++itEY) {
for (std::vector<int>::iterator itX = _DestroyedFields.X.begin(),
itY = _DestroyedFields.Y.begin();
itX != _DestroyedFields.X.end() && itY != _DestroyedFields.Y.end();
++itX, ++itY) {
if (*itY == *itEY && *itX == *itEX){
itEY = _Enemys.Y.erase(itEY);
itEX = _Enemys.X.erase(itEX);
}
}
}
PS:对不起,如果我的英语不是最好的,我是德国人^^
PSS:如果你想看我的整个代码,你可以在 Github 上找到它:https://github.com/Aemmel/ConsoleGame1
【问题讨论】:
-
目前,您在执行
erase...时会增加迭代器... -
我建议使用一个简单的结构来定位。
-
@Jarod42 简单结构是什么意思?
-
正在使用哪个双循环实现? git 上的版本假定 X 和 Y 总是相同的大小。以上应该是搜索正确元素的更好方法。
-
@CPlusPlusOOAandD 哎呀,没注意到它不一样^^。使用上面的例子。
标签: c++ vector stl iterator erase