标准::矢量::擦除与"swap and pop"

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

本文关键字:swap pop and 矢量 擦除 标准      更新时间:2023-10-16

从向量中删除元素的"正常"方法是这样的:

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

但从理论上讲,这样做会更快:

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

有什么理由不使用后者吗?

第二种情况不保留向量中元素的顺序。 如果这是一个排序向量或顺序很重要,那么您刚刚在第二种情况下打破了它,其中第一种情况将保持顺序不变。