1

リスト オブジェクトの配列へのポインターを宣言、作成、および操作するために必要な構文に苦労しています。チェーンを使用して衝突を処理するコース割り当て用のハッシュ テーブル テンプレート クラスを作成しています。

私のハッシュテーブルが想定されている方法は、listオブジェクトの配列です。std::list割り当てに使用できる唯一の標準ライブラリ データ クラスなので、vector は使用できません。

私の質問は次のとおりです: std::list の配列へのポインターを宣言するにはどうすればよいですか? 私は持っている:

private:
    std::list<T> * table;

配列を作成するにはどうすればよいですか? 私は持っている:

table = new std::list<T>[3]; // start with table size 3

宣言と構成は正しいと思いますが、100% 確実ではありません。最後に、リストを操作するにはどうすればよいですか? 私が持っている:

    for (int i = 0; i < _tableSize; i++) { // _tableSize is the array's size
        if (!table[0][i].empty()) {
            table[0][i].push_back(thing);
        }
    }

どういうわけか table[0][i] がtable指す配列のセルにアクセスするのが間違っているようです。それはどのように見えるべきですか?

4

3 に答える 3

3

tableであるためstd::list*、;をtable[i][j]意味します。(table + i)->operator[](j)つまり、address から始まるオブジェクトのメンバー関数を (引数 でj)呼び出します。std::listtable + i

オーバーロードされてstd::listいないため[]、間違っていることになります ( inがメンバー関数を持たないようなものである場合、table[0][i].empty()二重に間違っています)。Tstd::list<T>empty

table[list_index_on_array].empty()要するに、必要なのは空であることを簡単にチェックできることだと思います。

他のすべては問題ないようです。

于 2012-06-09T21:32:33.617 に答える
0

クラスFooが T のリストの配列へのポインターを持っている場合、その宣言は次のようになります。

#define NUMBER_OF_LISTS 100

template <typename T>
class Foo {
    std::list<T> (*table)[NUMBER_OF_LISTS];
    Foo (std::size_t = 1);
};

そして、それを初期化するために、Foo のコンストラクターは次のように割り当てを行うことができます。

template <typename T>
inline Foo<T>::Foo (std::size_t entries)
    : table(new std::list<T>[entries][100]) {}

これで、アクセスする必要があるコードが機能しますが、次のtableこともできます。

(*table)[i].push_back(something);
于 2012-06-10T00:18:00.053 に答える
-1

何に使う[0]の?だけ[i]で十分でしょう。

于 2012-06-09T21:28:40.133 に答える