如何从向量中删除第一次出现的值?

时间:2013-02-06 20:06:17

标签: c++ c++11

我正在尝试从向量中获取单个元素并将其推送到向量的后面然后将其删除,这样我就不会在内存中有空的部分。擦除删除习惯用法可以执行此操作,但它会删除特定值的所有实例。我只想删除第一个。

我对标准库算法没有太多经验,我找不到合适的方法(如果有的话)来做到这一点。这是一个例子:

int main() {
    std::vector<int> v{1, 2, 3, 3, 4};

    remove_first(v, 3);

    std::cout << v; // 1, 2, 3, 4
}

那么我该如何从这个向量中删除第一次出现的3?

1 个答案:

答案 0 :(得分:11)

如果你不关心保持向量中元素的顺序,你可以避免在擦除时复制剩余元素的“尾部”:

auto it = std::find(v.begin(), v.end(), 3);
if (it != v.end()) {
  std::iter_swap(it, v.end() - 1);
  v.erase(v.end() - 1);
}