基本上,我有一个结构的向量。我正在制作游戏Monopoly,我有一个playerStruct的向量。我可以选择让玩家离开游戏。但是,当矢量缩小时,我不知道如何删除任何播放器。例如,我有3名球员
Players 0,1,2
我使用擦除功能,
erase(vect.begin()+turnNumber);
我首先擦除仅为erase(vect.begin()+0)
的玩家0并删除第一个元素。但是,如果我尝试通过调用erase(vect.begin()+1)
来擦除玩家1,我最终会在向量缩小到2的情况下删除玩家2。
如何在向量减少时随时擦除玩家?我似乎无法想到一个公式erase(vect.begin()+(a number))
能够从游戏中删除任何玩家而不会删除另一个不打算被删除的玩家。
谢谢。
答案 0 :(得分:1)
这里的问题是:
的组合因此,在对矢量进行任何更改后,通过玩家的ID对其进行索引将不再有效。
您可以尝试使用std::map
或std::unordered_map
,这会将玩家编号映射到Player
。然后,您可以使用要删除的播放器在地图上调用erase()
。
如果您必须使用std::vector
,则需要让Player
存储播放器的ID。然后,您可以在不使用矢量索引的情况下搜索要删除的玩家的矢量。
修改强>
例如,如果我们假设你的结构看起来像:
struct Player {
int id;
// ...other members
};
并且您有vector<Player> players
,您可以使用std::remove_if
删除玩家n
:
auto iter = remove_if(players.begin(), players.end(), [&](Player const & player) {
return player.id == n;
});
players.erase(iter, players.end());
答案 1 :(得分:0)
从最后到第一个向后删除。