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

use*_*312 6 c++ performance vector erase

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

vec.erase(vec.begin() + index);
Run Code Online (Sandbox Code Playgroud)

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

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

有没有理由不使用后者?

Nat*_*ica 13

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

  • 如果订单不重要,那么无论工作是什么,矢量可能都不是正确的工具.虽然在某些情况下,顺序是_so_不重要的,矢量是正确的工具:D (2认同)