我让我的循环遍历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在这里会好吗?我可以用别的东西吗?
除非向量的元素复制起来非常昂贵,std::copy_if否则最简单的可能是(或以其他方式将要保留的元素复制到新向量中),然后将其与原始向量交换.remove_if接下来也是resize.
如果重新定位元素非常昂贵,那么a list会避免这种情况,但这取决于你对集合做了什么.如果你做了一些其他的东西,那将是一个非常缓慢的a list,那么你刚刚将问题转移到其他地方.