簡體   English   中英

使用指針而非迭代器擦除std :: list中的元素

[英]Erase an element in std::list using pointer not iterator

如標題所述,我正在使用std::list 我在master.list有對象。 然后,我使用std::priority_queue或任何稱為sortedList的對象將指向對象的指針存儲在master.list ,並且所有sortedList現在都在此sortedList排序。 由於已排序,因此可以使用sortedList.pop()刪除它們。

問題是如何優雅地將對象移回原始master.list

我想使用erase ,但是只有指針時才需要迭代器。 因為我想要速度,所以我真的不想在這里使用remove

為什么不將迭代器而不是原始指針存儲在優先級隊列中? 由於您使用的是列表,因此無需擔心迭代器無效。 然后,您可以只使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM