توفّر C++ حاويات مختلفة لتخزين عناصر من النوع نفسه بطريقة مرتّبة.
توجد std::array للحاويات ذات الحجم الثابت، وstd::vector التي تأتي بقدرات تغيير الحجم ديناميكيًا.
عندما تُعلن عن مصفوفة أو متجه، فأنت بحاجة إلى تحديد نوع العناصر التي ستضمّها الحاوية. تحتاج المصفوفات أيضًا إلى حجم. ألقِ نظرة على هذه الأمثلة لترى كيفية تهيئة نوعي الحاويات:
#include <array>
#include <string>
// std::array<element_type, size> variable_name {list of elements}
std::array<std::string, 3> indie_rock {"yeah", "yeah", "yeah"};
// indie_rock contains the elements "yeah" three times
عادةً ما تحتاج المتجهات إلى مساحة أكبر، لأنها تخصّص ذاكرة لمزيد من النمو. لست بحاجة إلى تحديد حجم:
#include <vector>
// std::vector<element_type> variable_name {list of elements}
std::vector<int> countdown {3, 2, 1};
// my_vector contains the elements 3, 2 and 1
ملاحظة: لست بحاجة بعد إلى معرفة الآلية الدقيقة التي تكمن وراء مفهوم القالب، فسيكون له مفهومه المستقل في موضع أدنى في شجرة المنهج.
تتشارك المتجهات والمصفوفات الدوال نفسها للوصول إلى عناصرها.
يمكنك استخدام دوال العضو front وback للحصول على العنصرين الأول والأخير في الحاوية.
توجد أيضًا at والعامل [] للوصول إلى عناصر محدّدة.
countdown[0];
// => 3
countdown.at(2);
// => 1
countdown[1] = 4;
// countdown now contains 3, 4 and 1
indie_rock.back() = "yeahs";
// indie_rock is now "yeah", "yeah", "yeahs"
ملاحظة: إذا اخترت موضعًا خارج نطاق حاويتك، فقد يؤدي
[]إلى سلوك غير معرّف. أما دالةatفسترفع استثناءً، وهو ما قد يسهّل عليك الأمور على المدى الطويل.
بما أن vector ليس ثابت الحجم، فمن الممكن إضافة عناصر أو إزالتها.
من الدوال الشائعة لهذا الغرض emplace_back وpop_back.
std::vector<std::string> witches {"Holly", "Alyssa", "Shannen"};
witches.pop_back();
// Shannen is no longer with the witches
witches.emplace_back("Rose");
// Rose has joined the team
يمكنك التحقق من خلوّ الحاويات باستخدام دالة العضو empty.
وإذا أردت معرفة عدد العناصر، يمكنك استخدام size.