اقرأ في هذا المقال
- مفهوم ال STL في لغة البرمجة ++C
- الفئات الرئيسية للحاويات الديناميكية في لغة البرمجة سي بلس بلس
- الكلاسات الرئيسية الموجودة في STL في لغة البرمجة سي بلس بلس
مفهوم ال 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) حيث تقوم بالتشييك على مفتاح أي عنصر سيتم إدخاله لتحديد المكان الذي يجب وضعه فيها مع الإشارة إلى أنه يمكن وضع نفس المفتاح لأكثر من عنصر. |