高效删除vector中的数据

void EraseVal(vector<int>&vec, int val)
{
    if (vec.empty()) return;
    auto itor = vec.begin();
    while (itor != vec.end())
    {
        if (val == *itor)
            itor = vec.erase(itor);
        else
            itor++;
    }
}

void EraseValEx(vector<int>&vec, int val)
{
    if (vec.empty()) return;
    auto itor = stable_partition(vec.begin(), vec.end(), [val](int value) {return val == value; });
    vec.erase(itor, vec.end());
}

EraseVal为利用vector中的erase进行删除,vector::erase复杂度为线性,删除之后的内容会依次往前一步

EraseValEx利用STL的算法进行处理,先进行分割,再进行处理,分割后的顺序维持原状不变,效率相比EraseVal,有极大提升

猜你喜欢

转载自www.cnblogs.com/Kaifangqu/p/12397941.html