c – std :: vector :: erase vs“swap and pop”
发布时间:2020-12-16 05:22:26 所属栏目:百科 来源:网络整理
导读:从向量中删除元素的“正常”方式如下: vec.erase(vec.begin() + index); 但从理论上说,这样做更快: if (vec.size() 1){ std::iter_swap(vec.begin() + index,vec.end() - 1); vec.pop_back();}else{ vec.clear();} 有没有理由不使用后者? 解决方法 第二种
从向量中删除元素的“正常”方式如下:
vec.erase(vec.begin() + index); 但从理论上说,这样做更快: if (vec.size() > 1) { std::iter_swap(vec.begin() + index,vec.end() - 1); vec.pop_back(); } else { vec.clear(); } 有没有理由不使用后者? 解决方法
第二种情况不保留向量中元素的顺序.如果这是一个有序的向量或者顺序很重要那么你刚刚在第二种情况下破坏了第一种情况会使订单保持原样.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |