ملخص
يختم هذا الدرس الوحدة السادسة من الدورة، المخصّصة للبيانات المركبة. فهو يعيد بناء سلسلة المفاهيم التي تمتد من التسلسل المفهرس إلى السجل، مرورًا بالتسلسل الذي ينمو، وكلفة الخوارزمية، والبحث والترتيب، والجداول؛ ويفصل ما يصحّ من ذلك في أي لغة عمّا يخصّ C++؛ ويجمع السلوك غير المعرَّف في الوحدة، مع ما توقفه المكتبة، وما يوقفه الكاشف، وما لا ينبّه إليه أحد؛ ويعيد في تقييم الخروج مهارات تقييم الدخول؛ ويُختم بستة تحدّيات تجمع الوحدة كلها.
أهداف التعلم
- تمثيل المجموعات والكيانات بالنوع المناسب (مصفوفة أو متجه أو جدول أو سجل)، وتسويغ الاختيار بشكل البيانات.
- معالجة المجموعات بخوارزميات صحيحة، مكتوبة باليد ومسوَّغة بلامتغير، أو مأخوذة من المكتبة مع احترام شروطها المسبقة.
- تقدير كلفة الخوارزمية بعدّ عملياتها المهيمنة، والتحقق من التقدير بقياس.
- التعرّف على السلوك غير المعرَّف في الوحدة (الوصول خارج الحدود، والمرجع المُبطَل، ونقطة المنتصف التي تفيض، والشرط المسبق للمكتبة حين يُنتهك) وإعادة كتابة البرنامج من دونه.
- الفصل، فيما تُعلِّم في الوحدة، بين ما يصحّ في أي لغة وما يخصّ C++.
ما حقّقته الوحدة
وضعت الوحدة لنفسها غاية أن تعلّم تمثيل مجموعات البيانات ومعالجتها بالخوارزميات الأساسية، مع تقدير كلفتها. وقد حقّقت ذلك بالاستناد فقط إلى ما أعلنت المقدمة أنه معلوم: الحلقات ذات اللامتغير، والدوال وطرق تمرير وسائطها، وحساب الأعداد الصحيحة. وبرنامج النقاط، الذي كان بخمسة متغيرات يسكت عن البيانات الزائدة، يُكتب الآن بمتجه؛ وسؤال التعادلات، الذي كان يستلزم دقائق لمليون قيمة حين تُفحص كل الأزواج، يُجاب عنه بالترتيب ثم مقارنة الجيران.
المصفوفات
قدّم درس المصفوفات النوع std::array، أي التسلسل ذا الحجم الثابت، الذي تُعَدّ فهارسه من الصفر لأنها مقادير إزاحة. وأثبت أن الفهرس صالح إذا وفقط إذا كان ، وأن كل وصول بـ [] يقتضي برهان ذلك بلامتغير الحلقة، وأن الوصول خارج الحدود سلوك غير معرَّف، تحوّله .at() إلى توقف معرَّف؛ وقدّم std::size_t وعلّم قراءة مصفوفات C.
المتجهات
قدّم درس المتجهات التسلسل الذي ينمو بـ push_back، وحدّد متى يلزم حفظ سلسلة من القيم: إذا كان قرار ما بشأن قيمة يتوقف على قيم لاحقة. وأرسى أنماط المرور القياسية (التجميع، والترشيح، والتحويل) بلامتغيراتها واختصاراتها في المكتبة (std::ranges::count، وstd::ranges::max، وstd::ranges::fold_left)، وقاعدة تمرير المتجه، والفرق بين الحجم والسعة، الذي تنتج عنه الكلفة الثابتة في المتوسط لـ push_back وإبطال المراجع حين ينتقل المتجه.
كلفة الخوارزمية
أضاف درس كلفة الخوارزمية السؤال الثاني: عدّ العملية المهيمنة في أسوأ حالة، والتصنيف حسب رتبة النمو، والتنبؤ بأثر مضاعفة ، والقياس بـ std::chrono::steady_clock، مع التحسين، ودون كاشفات، مع التكرار وأخذ القيمة الوسيطة.
البحث والترتيب
سوّغ درس البحث والترتيب البحث الثنائي بلامتغيره ومقياسه؛ وكتب الترتيب بالاختيار والترتيب بالإدراج، مع عدّ مقارناتهما؛ وقدّم خوارزميات مكتبة النطاقات مع الشرط المسبق للترتيب، الذي لا يتحقق منه أحد؛ وحسب متى يحسن الترتيب قبل البحث.
الجداول
مرّ درس الجداول على الجداول صفًّا صفًّا وعمودًا عمودًا، وحسب المنقولة وجداء المصفوفات الرياضية، بكلفته التكعيبية، وعدّ الخلايا المجاورة دون الخروج من الحواف، وحفظ جدولًا في متجه مسطَّح بالفهرس .
السجلات
استبدل درس السجلات بالمتجهات المتوازية النوعَ struct، مع قيمة ابتدائية في كل حقل؛ وعلّم تمرير السجلات وإعادتها، وترتيبها والبحث فيها حسب حقل بإسقاط، والترتيب بعدة معايير بـ std::ranges::stable_sort، ونمذجة مسألة بسجلات تحتوي سجلات ومتجهات.
جارٍ تحميل المحتوى…