مكتبة القوالب المعيارية Standard Template Library
وتختصر بــــ STL وتمثل دعم للغة ++C من توفير عدد من القوالب والخوارزميات الجاهزة اللتي تزيد من إنتاجية اللغة وتساعد على إختصار الوقت في كتابة الأكواد وغير ذلك فالمكتبة تعتبر من أسرع المكتبات وأقواها أداءً وهذه واضح من بُنيتها وأسس علاقاتها الداخلية . وهذه المكتبة مبنية على القوالب "template" أي أنها تدعم أي نوع وهذا ما زادها قوة بالإضافة إلى دعمها مفهوم generic programming و metaprogramming وأيضاً تدعم مبادئ Object oriented programming وهذا مما يزيد في قوتها .
ولكي تفهم تركيبة هذه المكتبة وتحسن التعامل معها يجب أن تعرف أنها تقوم على ثلاثة مفاهيم أساسية وهي :-
الوعاء ( Container ) :- وهي يحتوي على عدد من الكائنات التي لها نفس النوع ويقوم بإدارتها بواسطة الطرق "method" الموجودة به مثل vector , list , stack , set , map , multiset .
الخوارزمية (Algorithm) :- من اسمها هي خوارزميات تقوم بعدد من الوظائف والمهام على الوعاء مثل الحذف أو الإضافة أو البحث مثل copy , search , find , find_if , sort , qsort ,remove .
المكرر (Iterator) :- وهو يستخدم للتنقل بين عناصر الوعاء وهو الوسيط الذي يتم به التخاطب بين الوعاء وبين الخوارزميات فالخوارزميات لا تستقبل Container كوسيط بل تستقبل iterator يؤشر على بداية عناصر الوعاء ونهايته أو يؤشر على مجموعه جزئية منه .
وهذا رسم يوضح العلاقة بين هذه العناصر الثلاثة .

ومن الرسم يتضح أن الــ Container تُرسل إلى الـــAlgorithm عن طريق الــ Iterator فالمكرر هو لغة التخاطب بين الوعاء والخوارزمية .
إلى هنا شرحنا المفاهيم الأساسية لكن هل تكفي لفهم هذه المكتبة ؟؟؟ بالطبع لا توجد عدة مفاهيم أخرى يجب الإلمام بها مثل :
Adapter : وهو يقوم بإضافة واجهة جديدة لـــ component موجودة بحيث تستطيع استخدام نفس component لكن بواجهة جديدة تتناسب مع ما حاجتك .
Function Object : وتسمى بإختصار functor وهو كائن لكن يقوم بمهام function العادية إي أنك لن تفرق بينه وبين الدالة العادية لأنه قام بإعادة تعريف للمعامل ( ) فصار مثل الدالة العادية في الاستدعاء وله فوائد كثيرة سنذكرها في حينها إن شاء الله .
Allocator : وهو المسؤول عن إدارة الذاكرة وحجز وإرجاع الذاكرة واستخراج العناوين للكائنات في هذه المكتبة . والحالة الافتراضية له هو أنه يستخدم new و delete العادية لكن ممكن تطويرة ليقوم مقام Garbage Collection في المكتبة .
عموماً هذه تعتبر مقدمة عن STL وعن المفاهيم المتعلقة بها وفي الدرس المقبل سأشرح عن Containers وسنأخذ مثالين عمليين منها وهي vector و string.
ملاحظة الصور مأخوذة من كتاب ومو أنا اللي صنعتها فلا تنسون الحقوق محفوظة لصاحبها . وإذا فيه أي استفسار أنا جاهز .وأيضاً إذا فيه أي ملاحظات فأنا جاهز وترى هذه أول مرة أكتب فيه درس :D








