ملخص
حتى الآن عاش كل معطى في الدورة في متغيره الخاص، باسمه الخاص؛ لكن كثيرًا من المعطيات من النوع نفسه، كدرجات الحرارة في أسبوع، لا يمكن المرور عليها بحلقة إذا كان لكل منها اسم مختلف. يقدّم هذا الدرس أول بنية بيانات في الدورة، وهي التسلسل المفهرس: عناصر من النوع نفسه، في مواضع متجاورة من الذاكرة، مرقّمة ابتداءً من الصفر. وفي C++ الحديثة يُكتب بـ std::array، الذي يُثبَّت حجمه عند الترجمة. وتُدرس طريقة التصريح به، والنوع std::size_t للفهارس، وطريقتا المرور: بالفهرس وبحلقة for على النطاق. وتُقرَّر القاعدة التي تحكم الوحدة كلها: يكون الفهرس صالحًا إذا كان بين 0 والحجم ناقص واحد، وتُعلَّل هذه الصلاحية في كل وصول داخل حلقة باللامتغير. ويُبيَّن ما يحدث حين لا تتحقق، وهو سلوك غير معرَّف، ويُقارَن [] بالوصول المتحقَّق منه .at(). وأخيرًا تُعرض مصفوفات C، لقراءة شيفرة الآخرين.
أهداف التعلم
- التصريح بـ
std::arrayوتهيئته والمرور عليه بالفهارس وبحلقةforعلى النطاق. - التعليل، بواسطة لامتغير الحلقة، بأن الفهرس داخل الحدود في كل وصول.
- التمييز بين الوصول بـ
[]، الذي لا يتحقق منه المعيار، والوصول بـ.at()، الذي يُتحقَّق منه دائمًا، وشرح متى يناسب كلٌّ منهما. - قراءة شيفرة فيها مصفوفات C وشرح عيوبها مقارنةً بـ
std::array.
التسلسل المفهرس
معطيات كثيرة واسم واحد
لحساب متوسط درجات الحرارة في أسبوع بما تعلّمناه حتى الآن، سنحتاج إلى سبعة متغيرات، monday وtuesday وهكذا حتى sunday، وإلى مجموع من سبعة حدود. ومع درجات حرارة سنة ستكون 365، ولن تستطيع أي حلقة المرور عليها، لأن اسم المتغير في جسم الحلقة هو نفسه دائمًا. ما ينقص هو اسم للمجموعة كلها ورقم لكل عنصر، بحيث يمكن أن يكون الرقم متغيرًا تدفعه الحلقة إلى الأمام.
والتسلسل المفهرس هو ذلك بالضبط: مجموعة من عنصرًا من النوع نفسه، محفوظة الواحد تلو الآخر في خانات متجاورة من الذاكرة، ومعيَّنة بموضعها، الذي يُسمّى الفهرس. والرياضيات تعرف هذا الكائن: متتالية منتهية ، يدل فيها على العنصر الذي في الموضع ، أو متجه، كمتجهات دورة الجبر والهندسة 1. وفي C++ يُكتب a[i]، ويمكن أن يكون الفهرس أي تعبير صحيح: 2، i، i + 1.
لماذا من الصفر
في C++، كما في معظم اللغات الحالية، فهرس العنصر الأول 0، وفهرس الأخير . وليس السبب اصطلاحًا اعتباطيًا، بل الطريقة التي يُعثر بها على العنصر: إذا كان التسلسل يبدأ عند عنوان ما في الذاكرة وكان كل عنصر يشغل بايت، فإن العنصر ذا الفهرس يقع عند العنوان الابتدائي مضافًا إليه . فالفهرس إذن مقدار إزاحة: عدد العناصر التي يجب تخطّيها بدءًا من الأول. والأول يبعد عن نفسه صفر خطوات.
ومن ذلك يلزم التعريف الذي يحكم هذه الوحدة كلها: في تسلسل من عنصرًا، يكون الفهرس صالحًا إذا وفقط إذا كان . والمتباينة اليمنى تامة، وهي مصدر أكثر الأخطاء شيوعًا مع التسلسلات، أي خطأ الفرق بواحد: كتابة حيث كان يجب كتابة ، أو البدء من 1 حيث كان يجب البدء من 0. والفهرس المساوي لـ لا يدل على العنصر الأخير، بل على الخانة التي تلي التسلسل، وهي لا تنتمي إليه.
جارٍ تحميل المحتوى…