對於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