替代std:vector在循环中删除它的元素?

Pat*_*ryk 2 c++ stdvector

我让我的循环遍历vector的元素.在这个循环中,一些元素正在被删除(我希望它们被删除).虽然std :: vector不允许这样做,但我想要一个替代方案.

for(unsigned int j = 0; j < rectArray.size(); j++)
{
 if( rectArray[j] == 2 ) 
  {
   rectArray.erase(rectArray.begin() + j);
  }
//...
}
Run Code Online (Sandbox Code Playgroud)

你觉得std :: list在这里会好吗?我可以用别的东西吗?

Ste*_*sop 7

除非向量的元素复制起来非常昂贵,std::copy_if否则最简单的可能是(或以其他方式将要保留的元素复制到新向量中),然后将其与原始向量交换.remove_if接下来也是resize.

如果重新定位元素非常昂贵,那么a list会避免这种情况,但这取决于你对集合做了什么.如果你做了一些其他的东西,那将是一个非常缓慢的a list,那么你刚刚将问题转移到其他地方.

  • @Seth:虽然我在这种情况下对它的推荐可能会受到我最近标准的兴奋的影响;-) (2认同)