std :: vector :: erase vs" swap and pop"

时间:2016-01-25 13:53:44

标签: c++ performance vector erase

"正常"从向量中删除元素的方法如下:

vec.erase(vec.begin() + index);

但从理论上讲,这样做的速度更快:

if (vec.size() > 1)
{
    std::iter_swap(vec.begin() + index, vec.end() - 1);
    vec.pop_back();
}
else
{
    vec.clear();
}

有没有理由不使用后者?

1 个答案:

答案 0 :(得分:13)

第二种情况不保留向量中元素的顺序。如果这是一个有序的向量或者订单很重要,那么你在第二种情况下就已经破坏了第一种情况会使订单保持原样。