0

如标题所述,我正在使用std::list. 我在master.list. 然后我使用 astd::priority_queue或其他调用sortedList来存储指向 my 中对象的指针,现在master.list它都在 this 中排序sortedList。因为它已排序,所以我可以使用sortedList.pop().

问题是我怎样才能优雅地删除我原来的对象master.list

我想使用erase,但它只需要迭代器,而我只有指针。因为我要速度,这里真的不想用remove

4

1 回答 1

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);
于 2013-02-16T00:09:58.720 回答