Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - مدير المصفوفات الديناميكية

جزء من قسم Object Oriented Programming في رحلة C++ على Coddy — الدرس 17 من 104.

challenge icon

التحدي

سهل

لنقم ببناء فئة DynamicArray تدير ذاكرتها الخاصة، وتنمو تلقائيًا عند الحاجة — تمامًا كما تعمل std::vector في الكواليس!

ستقوم بإنشاء ملفين لتنظيم الكود الخاص بك:

  • DynamicArray.h: قم بتعريف فئة DynamicArray تدير مصفوفة أعداد صحيحة ذات حجم ديناميكي. يجب أن تحتوي الفئة الخاصة بك على:
    • أعضاء خاصة (Private members): مؤشر إلى مصفوفة البيانات، الحجم الحالي (عدد العناصر)، والسعة (المساحة المحجوزة).
    • منشئ (Constructor) يأخذ سعة أولية، ويخصص المصفوفة في الذاكرة (heap)، ويهيئ الحجم إلى 0.
    • مدمر (Destructor) يحرر الذاكرة المخصصة ويطبع "DynamicArray destroyed".
    • طريقة push(int value) تضيف عنصرًا إلى المصفوفة. إذا كانت المصفوفة ممتلئة، يجب أن تضاعف السعة عن طريق تخصيص مصفوفة جديدة أكبر، ونسخ العناصر الموجودة، وتحرير المصفوفة القديمة.
    • طريقة get(size_t index) تعيد العنصر الموجود في الفهرس المعطى.
    • طريقة getSize() تعيد العدد الحالي للعناصر.
    • طريقة getCapacity() تعيد السعة الحالية.
  • main.cpp: اقرأ السعة الأولية وعدد القيم المراد إضافتها. ثم اقرأ هذا العدد من قيم الأعداد الصحيحة وقم بإضافة كل منها إلى DynamicArray الخاص بك. بعد إضافة جميع القيم، اطبع:
    • "Size: <size>"
    • "Capacity: <capacity>"
    • "Elements: <e1> <e2> ..." (جميع العناصر مفصولة بمسافات)

تنسيق الإدخال سيكون:

  • السطر الأول: السعة الأولية (عدد صحيح)
  • السطر الثاني: عدد القيم المراد إضافتها (عدد صحيح)
  • الأسطر التالية: قيمة عدد صحيح واحدة في كل سطر

عند تغيير الحجم، يجب أن تضاعف المصفوفة سعتها. على سبيل المثال، إذا بدأت بسعة 2 وأضفت عنصرًا ثالثًا، يجب أن تصبح السعة 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: إنشاء DynamicArray بالسعة الأولية

    // TODO: قراءة numValues من الأعداد الصحيحة وإضافتها (push) إلى المصفوفة

    // TODO: طباعة "Size: <size>"

    // TODO: طباعة "Capacity: <capacity>"

    // TODO: طباعة "Elements: <e1> <e2> ..." (جميع العناصر مفصولة بمسافات)

    return 0;
}

جميع دروس Object Oriented Programming