الدرس 6 من 10

المتّجهات

هدف الدرس

std::vector وحلقة المدى

01

الشرح

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() قبل أن تقرأ.

02

المطلوب

أكمل 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 معايير
  1. maxOf تجد الأكبر
  2. maxOf مع السوالب وحدها، و0 للفارغ
  3. evens تُبقي الزوجية بترتيبها
  4. evens مع السالب والصفر والفارغ
  5. healAll تزيد كل عنصر في المتّجه نفسه ولا تتجاوز 100
  6. طُبع: عدد النتائج: 5 ثم الأعلى: 100
main.cpp
المخرجاتC++17 · GCC 9 · Judge0

يُترجَم الكود ويعمل على السيرفر…

–/6

يُترجَم الكود ويعمل على السيرفر…

6 معايير في بطاقة «المطلوب».