对于vector中高效删除中间元素的技巧


众所周知,vector是连续存储空间,只提供高效的尾部删除方法pop_back() ,在中间删除的效率很低,那么如果大家想快速删除中间元素该如何实现?

 

话不多说,看代码:

//移除vector元素,最后一个填充。
template<typename T>
inline void ListRemoveAt(vector<T>&list, size_t idx)
{
    if (idx  < list.size())
        list[idx] = list.back();
    list.pop_back();
}

我们的思路是:

如果想删除第二个元素,那么我们只需要将第二个元素填充为末尾元素,此刻就相当于把第二个元素删除了,但是此时尾部元素有两个, 所以我们需要把尾部元素删除(非常高效pop_back() ),这样的一套组合拳,就高效删除了vector中任意一个元素,当然,这种技巧适合于你对于元素的顺序无要求 !!!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM