c – 如何使用擦除功能通过索引从std :: vector <>中删除多个元素?

我有一个向量存储值[0 1 2 3 5]和其他向量removelist存储要删除的索引[0 1 2],以便在结尾留下[3 5].当我实现以下代码时,它会意外删除项目,因为向量a将在此过程中更改顺序.我有什么方法可以实现我的目标吗?

 for (int i = 0; i<removelist.size() ; i++)     
    a.erase(a.begin() + removelist[i]);
最佳答案
反转删除值的顺序,即使用removelist的反向迭代器.这当然依赖于removelist被分类.

也许是这样的

std::sort(removelist.begin(), removelist.end());  // Make sure the container is sorted
for (auto &i = removelist.rbegin(); i != removelist.rend(); ++ i)
{
    a.erase(a.begin() + *i);
}

转载注明原文:c – 如何使用擦除功能通过索引从std :: vector <>中删除多个元素? - 代码日志