0Pricing
C++ Academy · درس

حلقة for المعتمدة على النطاق مع الحاويات

كرّر على الحاويات بسلاسة باستخدام صياغة for المعتمدة على النطاق في C++11.

حلقة for المعتمدة على النطاق مع الحاويات درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

الحلقة الحديثة

قدّم C++11 حلقة for المعتمدة على النطاق — التي تتيح التكرار على أي حاوية دون فهارس أو مكررات صريحة. وهي أوضح وأقل عرضة للأخطاء.

std::vector<int> v = {1, 2, 3, 4, 5};
for (int x : v) {
    std::cout << x << " ";
}

بالقيمة

ينسخ المثال السابق كل عنصر إلى x. وهذا مناسب للأنواع قليلة التكلفة مثل int، لكنه مكلف للكائنات الكبيرة.

بالمرجع الثابت

بالنسبة إلى الأنواع غير البسيطة، استخدم const auto& لتجنب النسخ والإشارة إلى أنك لن تعدّل العناصر.

std::vector<std::string> names = {"Ada", "Bob"};
for (const auto& name : names) {
    std::cout << name << "\n";
}

بالمرجع للتعديل

استخدم مرجعًا عاديًا لتعديل العناصر في مواضعها.

std::vector<int> v = {1, 2, 3};
for (auto& x : v) {
    x *= 10;
}
// v is now {10, 20, 30}

استخدام auto لاستنتاج النوع

دع المصرّف يستنتج نوع العنصر. ومع السلاسل النصية، والمتجهات التي تحتوي على بنى، والخرائط، يوفر ذلك قدرًا كبيرًا من الكتابة.

التكرار على خريطة

كل عنصر هو std::pair<const Key, Value>. استخدم الربط البنيوي (C++17) لكتابة أوضح.

std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
    std::cout << name << ": " << age << "\n";
}

التكرار على السلاسل النصية

إن std::string حاوية من عناصر char.

std::string s = "hello";
for (char c : s) {
    std::cout << c << " ";
}

حلقات قائمة التهيئة

يمكنك استخدام حلقة معتمدة على النطاق مباشرةً على قائمة محاطة بأقواس معقوفة.

for (int n : {1, 2, 4, 8, 16}) {
    std::cout << n << " ";
}

حلقة عكسية معتمدة على النطاق

تسير حلقة for المعتمدة على النطاق إلى الأمام. وللتكرار العكسي، استخدم std::ranges::reverse_view (C++20) أو مكررات عكسية يدوية.

#include <ranges>
for (auto x : v | std::views::reverse) {
    std::cout << x;
}

القيود

لا تستطيع حلقة for المعتمدة على النطاق:

  • معرفة الفهرس الحالي دون عدّاد منفصل
  • تخطي العناصر أو تعديل الحاوية أثناء التكرار
  • التكرار على حاويتين بالتوازي (استخدم for عادية أو zip)

الأنواع المخصصة في for المعتمدة على النطاق

لجعل فئتك الخاصة تعمل مع for المعتمدة على النطاق، وفّر العضوين begin() وend() أو دوالًا حرة تعيد مكررات.

تحقق سريع

أي صيغة من حلقات for المعتمدة على النطاق تعدّل العناصر في الحاوية؟

مراجعة

تُعد حلقة for المعتمدة على النطاق أنظف طريقة للتكرار. استخدم const auto& افتراضيًا، وauto& للتعديل، والربط البنيوي لتفكيك الأزواج والصفوف.

الأسئلة الشائعة

هل درس «حلقة for المعتمدة على النطاق مع الحاويات» مجاني؟

نعم — نص درس «حلقة for المعتمدة على النطاق مع الحاويات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «حلقة for المعتمدة على النطاق مع الحاويات»؟

كرّر على الحاويات بسلاسة باستخدام صياغة for المعتمدة على النطاق في C++11. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «حلقة for المعتمدة على النطاق مع الحاويات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التفرّع: if-else و ternary و switch-case
  2. أنماط الحلقات: for وwhile وdo-while
  3. حلقة for المعتمدة على النطاق مع الحاويات
  4. العودة المبكرة وbreak وcontinue وgoto
← العودة إلى C++ Academy