在C++中,如何从向量中删除元素?
对于(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;
}
Run Code Online (Sandbox Code Playgroud)
标准的删除+擦除习惯用法按值删除元素:
#include <vector>
#include <algorithm>
std::vector<int> v;
v.erase(std::remove(v.begin(), v.end(), 12), v.end());
Run Code Online (Sandbox Code Playgroud)
remove重新排序元素,以便所有的擦除都在最后,并将迭代器返回到erasee范围的开头,并erase实际上从容器中删除元素.
这与使用连续存储容器一样高效vector,特别是如果您有多个具有相同值的元素,这些元素都会在一次清洗中被擦除.