Menu
Coddy logo textTech

復習 - 動的配列マネージャー

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

challenge icon

チャレンジ

簡単

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

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

  • DynamicArray.h: 動的サイズの整数のarrayを管理するDynamicArrayクラスをdefineします。クラスには次の要素が必要です。
    • Privateメンバー:dataarrayへのポインター、Current size(要素数)、およびcapacity(Allocated space)
    • initial capacityを受け取り、ヒープ上にarrayをallocatesし、sizeを0にinitializesするConstructor
    • Allocated memoryをfreesし、"DynamicArray destroyed"を表示するDestructor
    • push(int value)メソッド。arrayにelementをAddします。arrayがfullの場合は、新しくより大きなarrayをallocatesし、existing elementsをCopyingしてからold arrayをFreeingすることで、capacityをdoubleにします
    • get(size_t index)メソッド。given indexのelementを返します
    • getSize()メソッド。Current elementsのnumberを返します
    • getCapacity()メソッド。Current capacityを返します
  • main.cpp: initial capacityとAddするvaluesの数を読み取ります。次に、その数のintegersを読み取り、それぞれをDynamicArrayにpushします。all valuesをAddした後、次を表示します。
    • "Size: <size>"
    • "Capacity: <capacity>"
    • "Elements: <e1> <e2> ..."(all elementsをspacesで区切る)

input formatは次のとおりです。

  • First line: initial capacity(integer)
  • Second line: Addするvaluesの数(integer)
  • Following lines: 1行につき1つのinteger value

resizing時、arrayはcapacityをdoubleにする必要があります。たとえば、capacity 2で開始してthird elementをpushした場合、capacityは4になります。これはRAII principleを示しています。クラスはConstructorでmemoryをacquiresし、Destructorでそれをreleasesするため、memory leaksが発生しません。

#include "DynamicArray.h"を使用して、header fileをmain.cppにincludeしてください。

自分で試してみよう

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

using namespace std;

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

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

    // TODO: Create a DynamicArray with the initial capacity

    // TODO: numValues個の整数を読み取り、それぞれを配列にプッシュする

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

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

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

    return 0;
}

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

自分で練習してみよう: C++オンラインコンパイラ