在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