2012-07-22 97 views
0
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函數做到這一點,但我必須提供位置或迭代器。如何刪除一個元素的形式列表使用C++中的指針指向這個元素

請給我一些想法如何使用指針擦除此元素,而不是通過列表。

+0

是否有任何理由要使用指針而不是迭代器?上面的代碼示例絕對不需要它。 – Giel 2012-07-22 19:50:38

+0

我第二個Giel的問題:爲什麼你不能通過'valitr'來擦除()'? – Turix 2012-07-22 19:56:22

回答

0

valitr表示列表中的位置。 *valitr取消引用迭代器,爲您提供對該指針的值數據的引用,該指針不再有任何引用它存儲在其中的列表。

如果您確實需要擦除列表中的某個元素,而不僅僅是去的第二個元素,你要掃描列表(從begin()end(),並檢查條件尋找元素,並使用迭代該元素使用erase

0

列表的API並不打算你需要迭代器

根據你正在使用的實現,可能是從指針獲取元素的interator的方法,但這並不能保證。它可能稍後會改變。

儘量保持迭代器不知何故。

相關問題