C++ では、ベクトルから要素を削除するにはどうすればよいですか?
- その場所から削除します。つまり、ベクトルのサイズを変更します。
- 削除する要素を最後の要素と交換 st 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;
}