1

C++ で辞書 (ADT) を実装する課題に取り組んでいます。最初に Xcode でプログラムを作成しましたが、すべて正常に動作しているように見えました。しかし、私は最近、採点者が Visual Studio 2010 を使用していることを発見したので、自分のコードが VS2010 でも動作することを確認しようとしました....

私が今直面している問題はremove()、ハッシュ テーブルの関数にあります。基本的に、リストのベクトルを使用し、リストを繰り返し処理して衝突エントリを削除しています。ただし、この関数をテストしようとするとremove()、次のエラーが発生しますdebug assertion failed! expression list iterators incompatible。アサートに関する Visual C++ のドキュメントを調べてみましたが、すべてが機能するように見えます....見落としているものはありますか?

これが私のコードです:

///**DELETE***////  
void remove(string key) {
    size_t index = hashString(key);
    list<Entry>& entry = table.at(index);
        for(typename list<Entry>::iterator it = entry.begin();
            it != entry.end();
            /**/)
        {
            if (it->data == key) {
                table[index].erase(it);
            } else
                it++;
        }
    //entry not found
    cout << "Error: Cannot Delete... No Such Entry"<< endl;
}
4

1 に答える 1

2

の戻り値を無視している疑いがありますeraseeraseこれへの呼び出しを含む行を変更すると機能しますか?

it = table[index].erase(it);

または実際に:

it = entry.erase(it);

ここのドキュメントを参照してくださいlist::erase

http://www.cplusplus.com/reference/list/list/erase

于 2013-06-13T17:30:00.323 に答える