【发布时间】:2014-02-05 22:10:30
【问题描述】:
在 c++ 中从 std::list 中删除一个元素并将其放在末尾的最佳方法是给当前元素和列表当然的迭代器。
这是我现在写的,我不确定是最好/正确的方法:
void MyClass::update(std::list<T> * memSegs, std::list<T>::iterator it){
memSegs -> splice(
memSegs -> end(),
*memSegs,
it
);
}
【问题讨论】:
-
定义最佳。为什么不只是
push_back(*it); erase(it)? -
我想最简单的就是我的意思,也许是恒定的时间......
-
@NiklasB.:Ew,复制元素,这绝对是不必要的,因为只需要移动节点。我认为 OP 的代码是完全正确的。
-
@Saher:那么你的方法有什么问题?
-
如果你通过指针而不是引用传递列表,你必须担心它是否为空。试试 `void MyClass::update(std::list
& memSegs, std::list ::iterator it)`。