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 函数可以做到这一点,但我必须提供 position 或 iterator 。

请告诉我如何使用指针而不是遍历列表来擦除这个元素。

4

2 回答 2

0

列表的 API 不打算通过指针删除元素。你需要迭代器。

根据您使用的实现,可能有一些方法可以从指针中获取元素的插入器,但这并不能保证。而且以后可能会改变。

尝试以某种方式保留迭代器。

于 2012-07-22T20:35:19.393 回答
0

valitr表示列表中的位置。*valitr取消对迭代器的引用,为您提供对该指针的值数据的引用,该指针不再对存储它的列表有任何引用。

如果您确实需要删除列表中的某个元素,而不仅仅是去寻找第二个元素,您必须扫描列表(从begin()to end(),并检查查找元素的条件,并使用erase迭代器对该元素使用。

于 2012-07-22T20:06:16.687 回答