[英]how i can erase an element form list using pointer to this element in c++
typedef struct value
{
char* contents;
int size;
}Value;
hash_map<Key,list<Value>,hash<Key>,eqKey> dspace;
hash_map<Key, list<Value>, hash<Key>, eqKey>::iterator itr;
list<Value> vallist;
list<Value>::iterator valitr;
Value * ptr;
itr=dspace.find(searchKey);
valitr=(itr->second).begin();
valitr++;
ptr=&*valitr;
這里的ptr指針指向由valitr迭代器指向的元素的地址。 現在,我想使用此指針從列表中刪除此元素。 我發現list.erase函數可以做到這一點,但我必須提供位置或迭代器。
請給我一些想法,我該如何使用指針而不是通過列表來擦除此元素。
valitr
表示列表中的位置。 *valitr
取消引用迭代器,為您提供對該指針的值數據的引用,該指針不再對其存儲的列表進行任何引用。
如果您需要確實在列表中刪除某個元素,而不是僅僅去的第二個元素,你要掃描列表(從begin()
到end()
並檢查條件尋找元素,並使用erase
使用該元素的迭代器。
列表的API並不打算通過指針刪除元素。 您需要迭代器。
根據您使用的實現,可能有多種方法可以從指針獲取元素的插入器,但這不能保證。 而且以后可能會改變。
嘗試以某種方式保留迭代器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.