-1

次のように、動的にサイズ変更された整数の配列を作成できます。

int *cacheL2 = new int[L2/B2];

Dataまた、次のようなタイプのオブジェクトを作成することもできます。

Data one(12,12);

そして今、動的にサイズ変更された配列が必要ですData:

Data * vlaObj = new Data[L2/B2];

しかし、うまくいきません...

また、C ++でハッシュを機能させる方法を教えていただければ幸いです。例を探していましたが、すべて #include "hash_map" とだけ表示されていますが、ライブラリを使用しようとすると、それらのいずれも見つからないようです。

4

3 に答える 3

2
#include <vector>

// ...
std::vector<Data> v;
v.emplace_back( 12, 12 );
于 2013-02-18T00:51:07.667 に答える
1

ここで STL コンテナーを使用しない理由はありません。std::vector生のポインターの代わりに使用することをお勧めします。

#include <vector>

//...
std::vector<Data> vlaObj(L2/B2);
vlaObj.push_back(one)

編集:ところで、L2またはB2の値が になる可能性はあります0か?

于 2013-02-18T00:50:38.700 に答える
0

Data* arr = new Data[len];うまくいかない最も可能性の高い理由の 1 つは、 typeDataにデフォルトのコンストラクタがないためですData::Data()

しかしData、デフォルトのコンストラクターがあるかどうかに関係なく、とにかくこのような配列を作成しようとするのは得策ではありません。動的に割り当てたら、new[]それに接続する醜いメモリ管理を処理することを約束します。std::vector(必須)などの STL コンテナーの 1 つを使用して#include <vector>、メモリ管理を処理することをお勧めします。

次に、いくつかのオプションがあります。

std::vector<Data> v;                    // option 1
v.reserve(len);
// in loop:
    v.push_back(Data(x, y));            // there could be different values

std::vector<Data> v2(len);              // option 2

std::vector<Data> v3(len, Data(12,12)); // option 3

最初のオプションは、ほぼすべての状況に適合します。要素を保持するのに十分な大きさのメモリのチャンクを準備し、便利でありながら非常に効率的な方法でlen埋めることができます。vオプション 2Dataにはデフォルトのコンストラクターが必要です。これは、カスタム コンストラクターを使用して要素を構築するオプション 3 によって解決されます。

上記のすべてのオプションにより、std::vector自動保存期間が作成されるオブジェクトが生成されます。すべての要素はメモリの連続ブロックに格納されるため、 を使用&v[0]して最初の要素へのポインタを初期化し、動的に割り当てられた配列を操作するのと同じ方法で操作できます。

于 2013-02-18T01:36:51.100 に答える