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 関数がこれを行うことがわかりましたが、位置または iterator を提供する必要があります。

list を調べるのではなく、 pointer を使用してこの要素を消去する方法を教えてください。

4

2 に答える 2

0

リストの API は、ポインタによって要素が削除されることを意図していません。イテレータが必要です。

使用している実装によっては、要素のインターレーターをポインターから取得する方法があるかもしれませんが、それは保証されていません。そして後で変わるかもしれません。

どうにかイテレータを保持するようにしてください。

于 2012-07-22T20:35:19.393 に答える
0

valitrリスト内の位置を示します。*valitrイテレータを逆参照し、そのポインタの値データへの参照を提供します。これは、格納されているリストへの参照をもう持っていません。

リスト内の特定の要素を実際に消去する必要があり、2 番目の要素に移動するだけでなく、リストをスキャンする必要があります (からbegin()までend()、要素を見つけるための条件を確認し、eraseその要素にイテレータを使用して使用します。

于 2012-07-22T20:06:16.687 に答える