2

特定のポジションの「コード」を取得する必要があるシステムがあります。1 ~ 40 の一定数の位置がありますが、各位置は異なる数のコード (2 ~ 20) を持つことができます。コンテナは定数であり、定義する必要があり、プログラムの残りの位置を検索するために使用されます。

たとえば、次のようなことができる必要がありmyCodes.at(position3)ます。{1, 3, 9, 23, 52}myCodes.at(position7){23, 52}

したがって、外側のコンテナーは一定のサイズですが、内側のコンテナーのサイズは 2 から 20 までさまざまです。私が知っている方法は、配列を使用して、2 番目の次元を可能な最大サイズ (20)const int myCodes[40][20]にすることです。次に、内側の配列に余分な 0 を「埋め込む」だけです。

ただし、特に内部配列の多くは 2 つの要素しか保持しないため、これは非常に無駄に感じます。私はC++ 11の学習にも取り組んでいるので、「最新の」ソリューションがあればそれを好みます。

4

3 に答える 3

3

これはおそらくあなたが望むものです:

std::array<std::vector<code>, const_size>

外側は一定で、内側は動的です。

両方を定数にし、パディングを使用すると高速になりますが、はるかに醜いので、最初は試してはいけません。18*20 の未使用の整数は、最新のハードウェアではあまり無駄ではありません。

于 2012-11-18T01:03:00.517 に答える
2

非常識なアプローチの場合、さまざまなサイズの std 配列のタプルに加えて、配列の開始/終了への反復子のペアの配列。メモリの場合、最初の結果は不均一な連続ブロックになり、2番目の結果は均一な範囲ベースのアクセスを提供します。理論的には、2 番目はオンザフライで計算できますが、キャッシュするだけです。

配列のタプルをペアの配列に変換するコードは、書くのが楽しいでしょう。

実際には、ベクトルの配列またはベクトルのベクトルの前の答えを実行します。しかし、この手法は、最新の C++11 でどのように処理できるかを示しています。

于 2012-11-18T01:14:06.873 に答える
2

vectorsの配列または の配列のいずれかを使用する必要がありlistsます。

std::array<std::vector<MyType>, const_size>

std::array<std::list<MyType, const_size>

どちらも一方の次元では静的で、他方の次元では動的な構造です。

于 2012-11-18T01:25:09.427 に答える