眾所周知,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中任意一個元素,當然,這種技巧適合於你對於元素的順序無要求 !!!