0Pricing
C++ Academy · درس

فئات المكرّرات: input وforward وbidirectional وrandom

ميّز بين فئات المكرّرات، واختر الخوارزميات الملائمة لها.

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

ما هو المكرّر؟

المكرّر iterator هو مؤشّر عام. تعمل الخوارزميات من خلال المكرّرات، مما يفصلها عن الحاوية الأساسية.

فئات المكرّرات الخمس

تُصنَّف المكرّرات وفقًا لقدراتها:

  • إدخال — للقراءة فقط، وتمريرة واحدة
  • إخراج — للكتابة فقط، وتمريرة واحدة
  • أمامي — للقراءة والكتابة، ومرورات متعددة
  • ثنائي الاتجاه — يمكنه التحرك إلى الأمام والخلف
  • وصول عشوائي — يمكنه القفز بمقدار إزاحة صحيحة

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

اقرأ مرة واحدة، ثم تقدّم، وكرّر. لا يمكنك الرجوع إلى العناصر السابقة. مثال: std::istream_iterator.

std::istream_iterator<int> in(std::cin), end;
while (in != end) {
    std::cout << *in << " ";
    ++in;
}

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

للكتابة فقط. مثال: std::ostream_iterator وstd::back_inserter.

std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);

المكرّرات الأمامية

مثل مكرّرات الإدخال، لكنها تدعم المرور المتعدد — يمكنك إعادة التكرار بدءًا من الموضع نفسه. مثال: std::forward_list.

المكرّرات ثنائية الاتجاه

تضيف إلى المكرّرات الأمامية إمكانية استخدام --. أمثلة: std::list وstd::map وstd::set.

std::list<int> l = {1, 2, 3};
auto it = l.end();
--it;        // OK, points to last element

مكرّرات الوصول العشوائي

تضيف إلى المكرّرات ثنائية الاتجاه إمكانية القفز: it + n وit - n وit[k] وit1 - it2. أمثلة: std::vector وstd::deque والمصفوفات الخام.

متطلبات الخوارزميات

تحدد كل خوارزمية الحد الأدنى لفئة المكرّرات التي تحتاج إليها. تتطلب std::sort وصولًا عشوائيًا، بينما لا تتطلب std::find سوى مكرّر إدخال.

سمات المكرّرات

تكشف std::iterator_traits<Iter> نوع قيمة المكرّر وفئته وخصائص أخرى وقت الترجمة.

using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;

std::advance وstd::distance

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

auto it = v.begin();
std::advance(it, 5);              // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);

المكرّرات المخصصة

لكتابة مكرّرك الخاص، عرّف الأسماء المستعارة للأنواع والعمليات المطلوبة للفئة المستهدفة — operator* وoperator++ وoperator== وغير ذلك.

مفاهيم المكرّرات في C++20

أضافت C++20 مفاهيم رسمية مثل std::input_iterator وstd::forward_iterator وstd::random_access_iterator. وهي تستبدل النظام الأقدم القائم على الوسوم.

اختبار سريع

أي فئة من المكرّرات تدعم التعبير it + n بزمن ثابت؟

مراجعة

تُصنَّف المكرّرات وفقًا لقدراتها — إدخال وإخراج وأمامية وثنائية الاتجاه ووصول عشوائي. وتتطلب الخوارزميات فئة دنيا. مكرّرات vector تتيح الوصول العشوائي، بينما مكرّرات list وmap ثنائية الاتجاه.

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

هل درس «فئات المكرّرات: input وforward وbidirectional وrandom» مجاني؟

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

ماذا ستتعلم في «فئات المكرّرات: input وforward وbidirectional وrandom»؟

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

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

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

كم من الوقت يستغرق درس «فئات المكرّرات: input وforward وbidirectional وrandom»؟

معظم دروس 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