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

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

جزء من قسم البرمجة كائنية التوجه في رحلة C++ على Coddy. الدرس 17 من 104.

challenge icon

التحدي

سهل

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

ستُنشئ ملفين لتنظيم التعليمات البرمجية الخاصة بك:

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

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

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

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

    // TODO: اقرأ numValues أعدادًا صحيحة وادفع كلًا منها إلى المصفوفة

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

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

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

    return 0;
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C++ عبر الإنترنت