الدرس 6 من 10
المتّجهات
- 13 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
std::vector وحلقة المدى
الشرح
std::vector<int> scores = {72, 95, 64}; قائمة تكبر وتصغر، من <vector>، والنوع بين <> نوع عناصرها. push_back(88) تُلحق عنصرًا في آخرها، وsize() عدد عناصرها، وempty() سؤال عن فراغها، وscores[0] أوّلها، فالعدّ من الصفر.
وحلقة المدى تمرّ على كل عنصر بلا عدّاد: for (int s : scores)، وs فيها نسخة. ولتعديل العناصر نفسها اجعله مرجعًا: for (int& s : scores) { s += 5; }. وحين تمرّر المتّجه إلى دالة تقرؤه فمرّره const std::vector<int>&، وإلا نُسخت القائمة كلها في كل استدعاء.
والفخّ أن [] لا تفحص الحدود: scores[10] في قائمة من ثلاثة تقرأ ذاكرة ليست لها، فتعطي قيمة عشوائية أو تُسقط البرنامج، بلا رسالة واضحة. وscores.at(10) تفحص وترمي استثناءً. والقائمة الفارغة ليس فيها [0] أصلًا، فاسأل empty() قبل أن تقرأ.
المطلوب
أكمل int maxOf(const std::vector<int>& v): أكبر عنصر، و0 للمتّجه الفارغ، ويصحّ حتى لو كانت العناصر كلها سالبة. وstd::vector<int> evens(const std::vector<int>& v): متّجه جديد فيه الأعداد الزوجية وحدها بترتيبها. وvoid healAll(std::vector<int>& hps, int amount): تزيد صحة كل لاعب في المتّجه نفسه بـ amount، ولا تتجاوز بها 100. ثم في main أضف 100 إلى scores بـ push_back، واطبع سطرين: عدد النتائج: 5 من size()، ثم الأعلى: 100 من maxOf.
معايير التصحيح
6 معايير- maxOf تجد الأكبر
- maxOf مع السوالب وحدها، و0 للفارغ
- evens تُبقي الزوجية بترتيبها
- evens مع السالب والصفر والفارغ
- healAll تزيد كل عنصر في المتّجه نفسه ولا تتجاوز 100
- طُبع: عدد النتائج: 5 ثم الأعلى: 100