Menu
Coddy logo textTech

まとめ:動的配列マネージャー

CoddyのC++ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 17/104。

challenge icon

チャレンジ

簡単

必要に応じて自動的に拡張される、独自のメモリを管理する DynamicArray クラスを作成しましょう。これは、内部で std::vector が動作する仕組みと同じです!

コードを整理するために、2つのファイルを作成します:

  • DynamicArray.h: 整数型の動的サイズ配列を管理する DynamicArray クラスを定義します。クラスには以下のものを含める必要があります:
    • プライベートメンバ:データ配列へのポインタ、現在のサイズ(要素数)、およびキャパシティ(割り当てられたスペース)
    • 初期キャパシティを受け取り、ヒープ上に配列を割り当て、サイズを0に初期化するコンストラクタ
    • 割り当てられたメモリを解放し、"DynamicArray destroyed" と出力するデストラクタ
    • 配列に要素を追加する push(int value) メソッド。配列がいっぱいの場合、新しいより大きな配列を割り当て、既存の要素をコピーし、古い配列を解放することで、キャパシティを2倍にする必要があります
    • 指定されたインデックスの要素を返す get(size_t index) メソッド
    • 現在の要素数を返す getSize() メソッド
    • 現在のキャパシティを返す getCapacity() メソッド
  • main.cpp: 初期キャパシティと追加する値の数を読み取ります。次に、その数だけ整数値を読み取り、それぞれを DynamicArray に push します。すべての値を追加した後、以下を出力してください:
    • "Size: <size>"
    • "Capacity: <capacity>"
    • "Elements: <e1> <e2> ..." (すべての要素をスペースで区切って表示)

入力形式は以下の通りです:

  • 1行目:初期キャパシティ(整数)
  • 2行目:追加する値の数(整数)
  • 続く行:1行につき1つの整数値

リサイズ時、配列のキャパシティは2倍にする必要があります。例えば、キャパシティ2で開始し、3つ目の要素を push した場合、キャパシティは4になるはずです。これは RAII 原則を示しています。クラスはコンストラクタでメモリを取得し、デストラクタでそれを解放することで、メモリリークが発生しないようにします。

main.cpp#include "DynamicArray.h" を使用してヘッダーファイルをインクルードしてください。

自分で試してみよう

#include <iostream>
#include "DynamicArray.h"

using namespace std;

int main() {
    // 初期容量を読み込む
    int initialCapacity;
    cin >> initialCapacity;

    // 追加する値の数を読み込む
    int numValues;
    cin >> numValues;

    // TODO: initialCapacity を使用して DynamicArray を作成する

    // TODO: numValues 個の整数を読み込み、それぞれを配列に push する

    // TODO: "Size: <size>" を出力する

    // TODO: "Capacity: <capacity>" を出力する

    // TODO: "Elements: <e1> <e2> ..." (すべての要素をスペース区切りで)を出力する

    return 0;
}

オブジェクト指向プログラミングのすべてのレッスン