如何使用擦除函数通过索引从std :: vector <>中擦除多个元素?

Tle*_*ung 5 c++ vector

我有一个a存储值[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]);
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 6

颠倒删除值的顺序,即使用 的反向迭代器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);
}
Run Code Online (Sandbox Code Playgroud)