在c ++中从std :: list中删除元素的最佳方法是什么,并将它放在最后给定当前元素和当前列表的迭代器。
这就是我现在所写的内容,我不确定这是最好/最正确的方法:
void MyClass::update(std::list<T> * memSegs, std::list<T>::iterator it){
memSegs -> splice(
memSegs -> end(),
*memSegs,
it
);
}
答案 0 :(得分:1)
从cppreference告诉我的内容,这确实是最佳的。恒定时间,元素被移动。
答案 1 :(得分:1)
如果你不关心其他元素的顺序,那么最简单的解决方案就是将it
指向的元素与容器中的最后一个元素交换。
std::swap(*it, memSegs->back());
否则std::list::splice
确实似乎是最好的选择。
对于其他容器,例如std::vector
,如果您想维护订单(如果您不关心则交换),那么您可以使用具有线性复杂性的std::rotate
。
std::rotate(it, std::next(it), std::end(*memSegs));