このような構造体が与えられた場合、どうすれば展開可能な (ベクトル) 配列を作成できますか?
struct IntArray {
int size;
int capacity;
int *contents;
};
int *contents を使用して整数の配列を指し、IntArray が展開するときにポインターを変更することを考えていましたが、整数の初期配列を作成するサイズをどのように知ることができますか?
このような構造体が与えられた場合、どうすれば展開可能な (ベクトル) 配列を作成できますか?
struct IntArray {
int size;
int capacity;
int *contents;
};
int *contents を使用して整数の配列を指し、IntArray が展開するときにポインターを変更することを考えていましたが、整数の初期配列を作成するサイズをどのように知ることができますか?
@aaronmanが言ったように、最終的な解決策を提供しただけでは、あなたにとっては良くありません。何かを学びたい場合は、自分でこれをゼロから試したほうがよいでしょう(そうでない場合は、既存のベクトルまたは任意のベクトルを使用してstd::vector
くださいQVector
) .
代わりに、インスピレーションを得るためにいくつかのチュートリアルまたはいくつかの例を参照してから、ゼロから始めることをお勧めします。動的配列を実装する C++ チュートリアルの単純な Google 検索でも、このような許容できるビデオとテキスト リンクがいくつか表示されます。
実装の詳細が明確になったら、配列のインターフェイスを設計することをお勧めします。考慮すべき点は次のとおりです。
class
代わりに、これをにします (カプセル化) 。struct
push_back
を最後に追加することができます。要素を追加すると再割り当てが発生する可能性があることがわかるので、再割り当てプロセスを別の (おそらくプライベートな) メソッドに抽出して (再利用可能にするために)、そのビデオのアイデアを使用して実装し、push_back
ifから呼び出すことをお勧めしsize == capacity
ます。最後に、実装をstd::vector
または他の既存の動的配列と比較して、何かが欠けているかどうかを確認できます。約 3 年前、卒業証書の作業で vector を独自に実装する必要がありました(パフォーマンス上の理由から、変更と再割り当てをきめ細かく制御するため)。チェックアウトすることもできますが、 (免責事項!)ちょっと複雑だと感じるかもしれません。最適化のすべての試みの後、面倒です:)
どうぞ!これが役に立てば幸いです(そして少し刺激を受けます)。