使用指针而不是迭代器擦除std :: list中的元素

时间:2013-02-15 23:54:56

标签: c++ list sorting pointers priority-queue

正如标题所述,我正在使用std::list。我在master.list中有对象。然后我使用std::priority_queue或其他任何名为sortedList的内容来存储指向master.list中对象的指针,现在它们全部按此sortedList排序。因为它已排序,我可以使用sortedList.pop()删除它们。

问题是如何在原始master.list

中优雅地删除对象

我想使用erase,但只有指针时才使用迭代器。因为我想要速度,所以我真的不想在这里使用remove

1 个答案:

答案 0 :(得分:3)

为什么不将迭代器存储在优先级队列中而不是原始指针?由于您使用的是列表,因此无需担心迭代器失效。然后你可以使用std::list::erase。存储迭代器的开销应该可以忽略不计,因为它只保存一个指向列表节点的指针。

typedef std::list<T> MyListT;
typedef std::priority_queue<MyListT::iterator> MyQueueT;

MyListT myList;
MyQueueT myQueue;

myList.push_front(T());
myQueue.push_back(myList.begin());

// Later...

MyListT::iterator itr = myQueue.front();
myQueue.pop_back();
myList.erase(itr);