0Pricing
C++ Academy · درس

أنماط المكرّرات الشائعة: ‏begin وend وadvance

استخدم std::begin وstd::end وstd::advance والمكرّرات العكسية بفعالية.

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

begin() وend()

توفّر كل حاوية قياسية begin() (العنصر الأول) وend() (موضع واحد بعد الأخير). ويُعد النطاق نصف المفتوح [begin, end) الطريقة المعتمدة للتكرار.

std::vector<int> v = {1, 2, 3};
for (auto it = v.begin(); it != v.end(); ++it) {
    std::cout << *it << " ";
}

std::begin وstd::end

دوال حرة في <iterator> تعمل مع أي حاوية، بما في ذلك مصفوفات C.

int arr[] = {1, 2, 3, 4};
for (auto it = std::begin(arr); it != std::end(arr); ++it) {
    std::cout << *it << " ";
}

cbegin وcend

تعيد إصدارتا c قيمة من النوع const_iterator. استخدمهما عندما لا تحتاج إلى التعديل وتريد أن يفرض المترجم ذلك.

rbegin وrend

مكرّرات عكسية. يشير rbegin() إلى العنصر الأخير، بينما يشير rend() إلى موضع واحد قبل الأول.

for (auto it = v.rbegin(); it != v.rend(); ++it) {
    std::cout << *it << " ";
}

std::next وstd::prev

أعد مكرّرًا بإزاحة عن مكرّر آخر، من دون تعديل المكرّر الأصلي.

auto it = v.begin();
auto next3 = std::next(it, 3);     // it + 3
auto prev1 = std::prev(it);         // it - 1

std::advance

عدّل مكرّرًا موضعيًا بمقدار مسافة. وتختار الخوارزمية أفضل تنفيذ بناءً على الفئة.

auto it = v.begin();
std::advance(it, 5);          // moves it forward by 5

std::distance

قِس عدد الخطوات بين مكرّرين. التعقيد O(1) للوصول العشوائي، وO(n) خلاف ذلك.

auto d = std::distance(v.begin(), it);   // index of it

مكرّرات الإدراج

مهايئات تحوّل الإسناد إلى إدراج:

  • std::back_inserter — push_back
  • std::front_inserter — push_front
  • std::inserter — الإدراج في موضع
std::vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));

مكرّرات التدفقات

استخدم التدفقات كنطاقات مع std::istream_iterator وstd::ostream_iterator.

// Read all ints from cin, print to cout
std::copy(
    std::istream_iterator<int>(std::cin),
    std::istream_iterator<int>{},
    std::ostream_iterator<int>(std::cout, " ")
);

المحو أثناء التكرار

تعيد erase المكرّر الصالح التالي. احفظه وأعد استخدامه.

for (auto it = v.begin(); it != v.end(); ) {
    if (*it < 0) it = v.erase(it);
    else         ++it;
}

إبطال صلاحية المكرّرات

قد يؤدي تعديل الحاوية إلى إبطال صلاحية مكرّراتها. تُبطل vector مكرّراتها عند تغيير حجمها، بينما تحافظ list على صلاحية مكرّراتها باستثناء المكرّرات الخاصة بالعناصر المحذوفة.

اختبار سريع

أي دالة تعيد مكرّرًا يشير إلى الموضع بعد آخر عنصر في الحاوية؟

مراجعة

استخدم begin()/end() للتكرار إلى الأمام، وrbegin()/rend() للتكرار العكسي. تعمل std::next وstd::prev وstd::advance وstd::distance بطريقة عامة. وتحوّل مكرّرات الإدراج الإسناد إلى إدراج.

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

هل درس «أنماط المكرّرات الشائعة: ‏begin وend وadvance» مجاني؟

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

ماذا ستتعلم في «أنماط المكرّرات الشائعة: ‏begin وend وadvance»؟

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

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

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

كم من الوقت يستغرق درس «أنماط المكرّرات الشائعة: ‏begin وend وadvance»؟

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

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

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

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

  1. فئات المكرّرات: input وforward وbidirectional وrandom
  2. أنماط المكرّرات الشائعة: ‏begin وend وadvance
  3. مقدمة إلى مكتبة Ranges في C++20
  4. محوّلات النطاقات: ‏views::filter وviews::transform وviews::take
← العودة إلى C++ Academy