التكرار على المتجهات: الفهرسة وrange-for والمكرّرات
كرّر على متجه باستخدام الوصول بالفهرس وrange-for والمكرّرات الصريحة.
التكرار على المتجهات: الفهرسة وrange-for والمكرّرات درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
ثلاث طرق للتكرار
يمكنك المرور على متجه باستخدام:
- حلقة تعتمد على الفهرس
for (size_t i = 0; i < v.size(); ++i) - حلقة تعتمد على النطاق
for (auto& x : v) - المكررات
for (auto it = v.begin(); it != v.end(); ++it)
الحلقة المعتمدة على الفهرس
هذه الطريقة مألوفة من لغة C، وتفيد عندما تحتاج إلى الفهرس إلى جانب القيمة.
for (size_t i = 0; i < v.size(); ++i) {
std::cout << i << ": " << v[i] << "\n";
}size_t مقابل int
تعيد size() قيمة من النوع size_t، وهو نوع غير موقّع. ويؤدي مزجه مع عدّاد int موقّع إلى تحذيرات من المصرّف وأخطاء دقيقة. استخدم size_t أو std::ssize في C++20.
حلقة for المعتمدة على النطاق
هذه هي الصيغة الأنظف عندما لا تحتاج إلى الفهارس. اختر مؤهل المرجع المناسب.
for (const auto& x : v) std::cout << x << " "; // read only
for (auto& x : v) x *= 2; // modify in placeالمكررات
المكرر هو مؤشر عام. يشير v.begin() إلى العنصر الأول، بينما يشير v.end() إلى الموضع الذي يلي العنصر الأخير.
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}const_iterator
استخدم cbegin() وcend() عندما لا تحتاج إلى تعديل العناصر؛ ويكون نوع المكرر حينها const_iterator.
المكررات العكسية
يمر rbegin() وrend() على العناصر من الخلف إلى الأمام. ويؤدي إلغاء الإشارة إلى الحصول على العناصر نفسها، ولكن بترتيب عكسي.
for (auto it = v.rbegin(); it != v.rend(); ++it) {
std::cout << *it << " ";
}حساب المكررات
مكررات المتجهات هي مكررات للوصول العشوائي؛ إذ يمكنك جمع الأعداد الصحيحة وطرحها منها، ومقارنتها باستخدام <.
auto it = v.begin();
it += 3; // skip 3 elements
std::cout << *it;تستخدم الخوارزميات المكررات
تقبل خوارزميات STL زوجًا من المكررات. مرّر v.begin(), v.end() إلى خوارزميات مثل std::sort أو std::find.
#include <algorithm>
std::sort(v.begin(), v.end());
auto it = std::find(v.begin(), v.end(), 42);متى تصبح المكررات غير صالحة؟
قد تؤدي إضافة عنصر إلى المتجه إلى إعادة تخصيصه. تصبح جميع المكررات والمؤشرات والمراجع إلى عناصر المتجه غير صالحة بعد أي عملية تغيّر السعة.
مطب: التعديل أثناء التكرار
لا تستدعِ مطلقًا push_back أو erase داخل حلقة for تعتمد على النطاق أثناء مرورها على المتجه نفسه. أنشئ متجهًا جديدًا أو اجمع الفهارس لمعالجتها لاحقًا.
اختبار سريع
أي صيغة من صيغ التكرار تصبح مكرراتها غير صالحة إذا تسبب push_back في إعادة تخصيص؟
مراجعة
اختر حلقة for المعتمدة على النطاق عندما لا تحتاج إلى الفهارس، والحلقة المعتمدة على الفهرس عندما تحتاج إليها، والحلقة المعتمدة على المكررات عند العمل مع الخوارزميات. تؤدي إعادة التخصيص إلى إبطال المكررات؛ لذلك لا تستدعِ push_back أثناء التكرار.
تعلم C++ مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «التكرار على المتجهات: الفهرسة وrange-for والمكرّرات» مجاني؟
نعم — نص درس «التكرار على المتجهات: الفهرسة وrange-for والمكرّرات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «التكرار على المتجهات: الفهرسة وrange-for والمكرّرات»؟
كرّر على متجه باستخدام الوصول بالفهرس وrange-for والمكرّرات الصريحة. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «التكرار على المتجهات: الفهرسة وrange-for والمكرّرات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات std::vector: push_back وsize وcapacity
- التكرار على المتجهات: الفهرسة وrange-for والمكرّرات
- تعديل المتجهات: insert وerase وclear
- vector مقابل std::array ومصفوفة C