从Vector中删除元素

Ben*_*Ben 3 c++ vector erase

在C++中,如何从向量中删除元素?

  1. 从它的位置删除它,即让矢量调整大小
  2. 交换要删除的元素与最后一个元素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;
}
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 8

标准的删除+擦除习惯用法按值删除元素:

#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,特别是如果您有多个具有相同值的元素,这些元素都会在一次清洗中被擦除.