الحاويات الديناميكية في لغة البرمجة سي بلس بلس STL Components

اقرأ في هذا المقال


مفهوم ال STL في لغة البرمجة  ++C:

(STL) في لغة البرمجة (++C) هي عبارة عن إختصار ل (Standard Template Library) وهي عبارة عن مكتبة ضخمة تحتوي على مجموعة من الدوال والكلاسات (Classes) الجاهزة، والتي تستخدم لتخزين مجموعة من القيم بشكل سهل جداً والذي يجعل التعامل معها أمر سهل للغاية من ناحية إضافة عناصر فيها أو حذف عناصر منها أو تحديث قيم عناصرها وترتيب عناصرها والبحث فيها، وهي تحتوي على مجموعة من المكونات:

  • حاويات (Containers).
  • دوال (Functions).
  • متواليات (Iterators).

الفئات الرئيسية للحاويات الديناميكية في لغة البرمجة سي بلس بلس:

الحاويات المتعاقبة (Sequence Containers):

وهي الحاوية التي تخزن العناصر التي نضيفها فيها بشكل متسلسل وراء بعضها البعض مع إعطاء لكل عنصر رقم يُسمى (Index) وكأنها مصفوفة عادية.

الحاويات الترابطية Associative Containers:

وهي الحاوية التي تخزن العناصر التي نضيفها فيها بشكل جدول، حيث أن كل عنصر نضيفه فيها يحتوي على مفتاح (Key) وقيمة (Value).

Container Adaptors:

وهي الحاوية التي تخزن العناصر التي يضيفها المستخدم  بشكل متسلسل مع القدرة على الوصول إليها، بحسب الترتيب الذي تم فيه إدخالها بأسلوب (FIFO) أو بأسلوب (LIFO) أو بحسب الأولوية المعطات لعناصرها.

الحاوية الترابطية الغير مرتبة (Unordered Associative Containers):

وهي الحاوية التي تخزن العناصر التي يضيفها المستخدم فيها على شكل (Buckets)، ممّا يجعل عملية الوصول إليها سريع جداً.

ما الفرق بين المصفوفة العادية و الحاوية الدينامكية:

في حالة إنشاء المصفوفات العادية فيجب على المستخدم تحديد عدد عناصرها لحظة إنشائها حتى يتم حجز مساحة ثابتة لها في الذاكرة و من بعدها يتم التعامل معها، أمّا في حالة الحاويات الدينامكية فإنه يتم حجز مساحة في الذاكرة للعنصر الذي تضيفه فيها في نفس اللحظة، وعند حذف عنصر معين يتم حذف  المساحة المحجوزة له ممّا يجعل عملية تنفيذ البرنامج تتم بوقت أسرع.

وفي المصفوفة العادية يتم التعامل مع عناصرها فقط من خلال رقم العنصر (Index)، أما في الحاويات الدينامكية فيوجد دوال عديدة نستخدمها للتعامل مع العناصر.

الكلاسات الرئيسية الموجودة في STL في لغة البرمجة سي بلس بلس:

الكلاسالاستخدام
array يستخدم  هذا الكلاس لإنشاء كائن يمثل مصفوفة متطورة مقارنة بالمصفوفة العادية، حيث أن التعامل معها يكون بشكل مرن أكثر لأن المستخدم يستطيع معرفة عدد عناصرها والحصول على قيمة أول وآخر عنصر فيها بكل سهولة.
vectorيستخدم هذا الكلاس لإنشاء كائن يمثل حاوية يتم تخزين العناصر التي يضيفها المستخدم فيها بشكل متسلسل مع إعطاء كل عنصر منهم رقم (Index)، ويشبه هذا الكلاس المصفوفة العادية إلى حد ما و لكن الفرق الأساسي بينهما أن حجمه ليس ثابتاً.
forward_listويستخدم هذا الكلاس لإنشاء كائن يمثل حاوية تخزن العناصر التي نضيفها فيها بشكل متسلسل مع إعطاء كل عنصر منهم عنوان العنصر الذي يليه في الذاكرة حتى يتم الحفاظ على الترتيب الذي تمت فيه عملية التخزين.
listيستخدم هذا الكلاس لإنشاء كائن يمثل حاوية تخزن العناصر التي يضيفها المستخدم بشكل متسلسل مع إعطاء كل عنصر منهم عنوان العنصر الذي يسبقه وعنوان العنصر الذي يليه في الذاكرة حتى يتم الحفاظ على الترتيب الذي تم فيه تخزينهم، ولتتمكن من التنقل بين العناصر بالإتجاهين من العنصر الأول إلى الآخر وبالعكس تماماً.
stackيستخدم هذا الكلاس  لإنشاء كائن يمثل حاوية تستخدم لتخزين العناصر التي يضيفها المستخدم بشكل متسلسل بأسلوب (LIFO) الذي يعني أن العنصر الذي يدخل أولاً يخرج أخيراً.
queueيستخدم هذا الكلاس لإنشاء كائن يمثل حاوية حيث بقوم بتخزين العناصر التي يضيفها المستخدم بشكل متسلسل وراء بعضها البعض بأسلوب (FIFO) الذي يعني أن العنصر الذي يدخل أولاً يخرج أولاً.
priority_queueيستخدم هذا الكلاس لإنشاء كائن يمثل حاوية تقوم بتخزين العناصر التي يضيفها المستخدم ويكون ذلك بترتيب معين، حيث يتم وضع العنصر الذي يملك القيمة الأكبر في البداية والعنصر الذي يملك القيمة الأصغر في النهاية، بالإضافة إلى أنه يسمح لك بالوصول لأعلى وأدنى قيمة.
dequeيستخدم هذا الكلاس لإنشاء كائن يمثل حاوية تخزن العناصر التي يضيفها المستخدم بشكل متسلسل مع إعطاء كل عنصر رقم (Index)، ممّا يجعل المستخدم قادراً على الوصول إلى جميع عناصرها وإضافة عناصر جديدة في أي مكان فيها.
setيستخدم هذا الكلاس لإنشاء كائن يمثل حاوية تخزن العناصر فيها بشكل متسلسل وبترتيب معين حيث يتم وضع العنصر الذي يملك القيمة الأصغر في البداية، والعنصر الذي يملك القيمة الأكبر في النهاية أو العكس، بالإضافة إلى أنه لا يمكن تخزين قيم مكررة فيها
multisetيستخدم هذا الكلاس لإنشاء كائن يمثل حاوية تخزن العناصر بشكل متسلسل وبترتيب معين، حيث يتم وضع العنصر الذي يملك القيمة الأصغر في البداية والعنصر الذي يملك القيمة الأكبر في النهاية أو العكس ولا يمكن تخزين أي قيم مكررة فيها.
mapيستخدم لإنشاء كائن يمثل حاوية تخزن العناصر التي نضيفها فيها بشكل جدول يتألف من عمودين حيث يتكون كل عنصر من مفتاح Key ) يوضع في العمود الأول، وقيمة Value ) توضع في العمود الثاني بالإضافة إلى أنها توفر إمكانية ترتيب العناصر بشكل تصاعدي على حسب قيم المفاتيح.
multimapستخدم هذا الكلاس لإنشاء كائن يمثل حاوية تخزن العناصر التي يضيفها المستخدم بشكل جدول يتألف من عمودين حيث يتكون كل عنصر من مفتاح Key ) يوضع في العمود الأول، وقيمة Value ) توضع في العمود الثاني بالإضافة إلى أنها ترتب العناصر بشكل تصاعدي على حسب قيم المفاتيح مع الإشارة إلى أنه يمكن وضع نفس المفتاح لأكثر من عنصر.
unordered_setويستخدم  هذا الكلاس لإنشاء كائن يمثل حاوية تخزن العناصر التي يضيفها المستخدم بترتيب معين، يتم تحديده من قبل دالة مخصصة لذلك إسمها (()Hash) حيث تقوم بالتأكد من قيم أي عنصر سيتم إدخاله لتحديد المكان الذي يجب وضعه فيه.
unordered_multisetويستخدم هذا الكلاس لإنشاء كائن يمثل حاوية تقوم بتخزين العناصر بترتيب معين يتم تحديده من قبل دالة مخصصة لذلك إسمها (()Hash) حيث تقوم بالتأكد من قيم أي عنصر سيتم إدخاله لتحديد المكان الذي يجب وضعه فيه مع الإشارة إلى أنه يمكن تخزين قيم مكررة داخلها.
unordered_map يستخدم لإنشاء كائن يمثل حاوية تخزن العناصر التي نضيفها فيها بشكل جدول يتألف من عمودين حيث يتكون كل عنصر من مفتاح Key ) يوضع في العمود الأول و قيمة Value ) توضع في العمود الثاني بالإضافة إلى أنها ترتب العناصر بالإعتماد على دالة مخصصة لذلك إسمها Hash() تقوم بالتشييك على مفتاح أي عنصر سيتم إدخاله لتحديد المكان الذي يجب وضعه فيها.
unordered_multimapيستخدم هذا الكلاس لإنشاء كائن يمثل حاوية يقوم بتخزين العناصر بشكل جدول يتألف من عمودين حيث يتكون كل عنصر من مفتاح Key ) يوضع في العمود الأول و قيمة Value ) توضع في العمود الثاني، بالإضافة إلى أنها ترتب العناصر بالإعتماد على دالة مخصصة لذلك إسمها (()Hash) حيث تقوم بالتشييك على مفتاح أي عنصر سيتم إدخاله لتحديد المكان الذي يجب وضعه فيها مع الإشارة إلى أنه يمكن وضع نفس المفتاح لأكثر من عنصر.

شارك المقالة: