C ++列表从位置和位置移除元素

时间:2014-02-05 22:10:30

标签: c++ list c++11

在c ++中从std :: list中删除元素的最佳方法是什么,并将它放在最后给定当前元素和当前列表的迭代器。

这就是我现在所写的内容,我不确定这是最好/最正确的方法:

void MyClass::update(std::list<T> * memSegs, std::list<T>::iterator it){

    memSegs -> splice(
        memSegs -> end(),
        *memSegs,
        it
    );
}

2 个答案:

答案 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));