众所周知,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中任意一个元素,当然,这种技巧适合于你对于元素的顺序无要求 !!!
原文链接: https://www.cnblogs.com/wangshaowei/p/11719377.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/391414
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!