0

私は現在、自分自身にC ++を教えており、単純なハッシュマップ(2つのテンプレートクラスを使用)を実装しようとしています。

ただし、ベクトルの動的配列を正しく初期化する方法がわかりません。失敗した私の試み:

std::vector<Key> *keys = new std::vector<Key>[size];
std::vector<Key> *keys = (std::vector<Key> *) malloc(sizeof(std::vector<Key>) * size);
std::vector<Key> **keys = reinterpret_cast<vector<Key> **>(malloc(sizeof(vector<Key>) * size));

それとも私はどこか他の場所で何か間違ったことをしていましたか?:(

4

2 に答える 2

1

あなたがしていることは不必要です、ベクトルは動的なサイジングをサポートします、そしてあなたはそれをする必要はありませんnew

それで:

std::vector<Key> keys = std::vector<Key>(size); // is fine to initialise the vector to a specific size.

のベクトルへのポインタが必要な場合は、そのように新しくすることができます

std::vector<Key>* keys = new std::vector<Key>(size);

また、いつでもオンデマンドで要素を追加および削除でき、必要に応じてサイズを変更するか、強制的に変更できます。

keys.resize(newSize); // note that if the new size is larger than current size
// it will default fill the new elements so if your `vector` is of `ints` 
// then it will pad with zeros.
于 2012-04-15T16:39:10.207 に答える
0

あなたはこのようにそれをするべきです:

std::vector<Key> *keys = new std::vector<Key>(size);

それらの試みの1つがうまくいったとしても:

std::vector<Key> *keys = (std::vector<Key> *) malloc(sizeof(std::vector<Key>) * size);
std::vector<Key> **keys = reinterpret_cast<vector<Key> **>(malloc(sizeof(vector<Key>) * size));

メモリを割り当てますが、コンストラクタを呼び出さないため、オブジェクトは作成しません。

于 2012-04-15T16:38:25.383 に答える