在C++中,如何从矢量中删除元素?从矢量中删除元素
- 从那里是删除是正确的,即让矢量调整
- 交换元件与所述最后一个元素S.T.被删除pop_back()可以使用(我希望不涉及复制周围的一切...)
对于(1),我试过以下,但我不太确定它是否做了什么这是应该做的(删除传递到的removeItem()项),它似乎并不很优雅:
vector<Item*> items;
// fill vector with lots of pointers to item objects (...)
void removeItem(Item * item) {
// release item from memory
if (int i = getItemIdIfExists(item) != -1) {
items.erase (items.begin()+i);
}
}
int getItemIdIfExists(Item * item) {
// Get id of passed-in Item in collection
for (unsigned int i=0; i<items.size(); i++) {
// if match found
if (items[i] == item) return i;
}
// if no match found
return -1;
}
谢谢,解决了我的问题。它也只会删除一个元素(这是我想要的)。由于某种原因,我自己的代码似乎删除了多个元素。关于这一套,我不太清楚为什么我会使用它!?除了这个特殊情况,我的访问主要是连续的(即所有项目都是更新,所有项目都被渲染等)。 – Ben
我不确定你是如何使用它,所以我想从一个集合中移除项目会比从一个矢量中移除更快(即使我们没有移动整个矢量,它仍然是O(n)for'removeItem '),但如果你没有做太多删除,你应该很好的矢量。 – Vlad
那么,'物品'在游戏中是可收集的,因此它们在每一帧都会被更新和渲染,而玩家实际收集这些物品时经常会被移除。所以我猜在这种情况下矢量是更好的选择。 – Ben