如何从向量中移除值的第一个出现

How do I remove the first occurrence of a value from a vector?

本文关键字:第一个 向量      更新时间:2023-10-16

我试图从向量中获取一个元素,并将其推到向量的后面,然后将其移除,这样内存中就不会有空的部分。擦除-删除习惯用法可以做到这一点,但它会删除特定值的所有实例。我只想去掉第一个。

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

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

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

先找到它,然后擦除它:

auto it = std::find(v.begin(),v.end(),3);
// check that there actually is a 3 in our vector
if (it != v.end()) {
  v.erase(it);
}

如果你不关心维护向量中元素的顺序,你可以避免擦除时剩余元素的"尾部"的复制:

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);
}