English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
STL هو اختصار لـ “Standard Template Library”، ويترجم إلى “مكتبة النمذجة القياسية”. STL هو جزء من مكتبة C++ القياسية، ولا يتطلب تثبيتًا منفردًا.
في الفصول السابقة، تعلمنا مفهوم النمذجة في C++، C++ STL (Standard Template Library) هو مجموعة قوية من أنماط C++، تقدم أنماط قياسية ووظائف، يمكن لهذه الأنماط والوظائف تنفيذ خوارزميات وأجهزة بيانات شائعة ومستخدمة، مثل قائمة، جدول، طابور، د栈.
يدعم C++ النمذجة بشكل جيد، STL
هي استخدام النمذجة لتحقيق جميع الهياكل البيانية الشائعة及其 خوارزميات، ويتم فصل الهياكل البيانية والخوارزميات. على سبيل المثال، قاعدة vector هي جدول، list
القاعدة هي قائمة متداخلة، deque هي قائمة حلقة، set هي شجرة أحمر-أسود، hash_set هي جدول هش.
نواة مكتبة قوالب C++ القياسية تشمل المكونات التالية ثلاثة:
المكونات | وصف |
---|---|
الحاويات (Containers) | الحاويات تستخدم لإدارة مجموعات من العناصر. يقدم C++ أنواعًا مختلفة من الحاويات، مثل deque،list،vector،map وما إلى ذلك. |
الخوارزميات (Algorithms) | الخوارزميات تعمل على الحاويات. توفر طرق لتنفيذ مجموعة متنوعة من العمليات، بما في ذلك تحديد محتوى الحاوية، ترتيبها، البحث فيها وتحويلها. |
المبدأ (Iterators) | المبدأ المستخدم للتنقل عبر عناصر مجموعة. قد تكون هذه المجموعة حاوية أو جزء من حاوية. |
هذه المكونات تحتوي على مجموعة واسعة من الدوال المسبقة التحديد، مما يساعدنا على تنفيذ المهام المعقدة بطرق بسيطة.
برنامج التالي يوضح كيفية استخدام حاوية فيector (واحدة من قوالب C++ القياسية)، وهي تشبه جدول البيانات، ولكن الفرق هو أن الفيector يتمتع بتخزين تلقائي عند الحاجة لتوسيع حجمه:
#include <iostream> #include <vector> using namespace std; int main() { // إنشاء مجموعة لتحتوي على int vector<int> vec; int i; // عرض حجم الابتدائي لـ vec cout << "حجم الابتدائي لـ vec = " << vec.size() << endl; // إضافة 6 قيم إلى المجموعة for(i = 0; i < 6; i++){ vec.push_back(i+1); } // عرض حجم vec بعد التوسيع cout << "حجم vec بعد التوسيع = " << vec.size() << endl; // زيارة 5 قيم داخل المجموعة for(i = 0; i < 5; i++){ cout << " vec[" << i << "] قيمة = " << vec[i] << endl; } // استخدام مبدأ "iterator" لفحص القيم vector<int>::iterator v = vec.begin(); while( v != vec.end()) { cout << "قيمة v = " << *v << endl; v++; } return 0; }
عندما يتم تجميع وتنفيذ الكود أعلاه، سيظهر النتيجة التالية:
حجم الابتدائي لـ vec = 0 حجم vec بعد التوسيع = 6 قيمة vec[0] = 1 قيمة vec[1] = 2 قيمة vec[2] = 3 قيمة vec[3] = 4 قيمة vec[4] = 5 قيمة vec[5] = 6 قيمة v = 1 قيمة v = 2 قيمة v = 3 قيمة v = 4 قيمة v = 5 قيمة v = 6
عن بعض النقاط التي يجب مراعاتها حول الوظائف المختلفة التي تم استخدامها في المثال أعلاه،
تضيف الدالة push_back() قيمة في نهاية القائمة، وإن كان ذلك ضروريًا فتوسع حجم القائمة.
تظهر الدالة size() حجم القائمة.
تعود الدالة begin() إلى البداية لجذع القائمة.
يعود الدالة end() إلى مسبق النهاية لجذع القائمة.