مكتبة C++ القياسية: نظرة شاملة على الإمكانيات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبة C++ القياسية (STL): نظرة شاملة



مكتبة C++ القياسية (غالباً ما تسمى STL - مكتبة القوالب القياسية) هي مجموعة قوية من الفئات والوظائف القالبية التي تشكل جزءاً لا يتجزأ من أي مترجم C++. وهي توفر للمطور حلولاً جاهزة ومختبرة وعالية الكفاءة لمعظم المهام اليومية: من العمل مع مجموعات البيانات إلى الخوارزميات المعقدة والإدخال/الإخراج. دراسة STL هي خطوة أساسية في إتقان لغة C++ الحديثة.



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



1. الحاويات (Containers)



الحاويات هي هياكل بيانات مصممة لتخزين مجموعات من الكائنات. جميع الحاويات هي فئات قالبية، مما يسمح بتخزين عناصر من أي نوع.



  • الحاويات المتسلسلة: تخزن العناصر بترتيب خطي.
    • std::vector - مصفوفة ديناميكية. وصول سريع بواسطة الفهرس، إدراج/حذف في النهاية - O(1)، في المنتصف - O(n).
    • std::list - قائمة مزدوجة الارتباط. إدراج/حذف سريع في أي مكان، ولكن لا يوجد وصول مباشر بواسطة الفهرس.
    • std::deque - طابور ثنائي الاتجاه. إدراج/حذف سريع في البداية والنهاية.
    • std::array - مصفوفة ثابتة ذات حجم ثابت (C++11).
  • الحاويات الترابطية: تخزن العناصر بترتيب مصنف (عادةً بناءً على أشجار حمراء-سوداء).
    • std::set - مجموعة من العناصر الفريدة.
    • std::map - قاموس (مصفوفة ترابطية) من أزواج "مفتاح-قيمة".
    • std::multiset / std::multimap - نظائرها تسمح بالتكرارات.
  • الحاويات الترابطية غير المرتبة (C++11): تستخدم جداول التجزئة.
    • std::unordered_set, std::unordered_map - وصول سريع بمتوسط O(1).
  • محولات الحاويات: توفر واجهة محدودة بناءً على حاوية أخرى.
    • std::stack (LIFO)، std::queue (FIFO)، std::priority_queue (ذات أولوية).


مثال على استخدام std::vector:

#include <iostream>#include <vector>

int main() { std::vector<int> numbers = {10, 20, 30, 40, 50}; numbers.push_back(60); // إضافة عنصر في النهاية for (int n : numbers) { std::cout << n << " "; } // الإخراج: 10 20 30 40 50 60 return 0;}


2. المكررات (Iterators)



المكررات هي مؤشرات عامة تسمح بالتكرار على عناصر أي حاوية بطريقة موحدة. وهي تشكل حلقة الوصل بين الحاويات والخوارزميات.



  • فئات المكررات: Input، Output، Forward، Bidirectional، Random Access.
  • begin() / end() - ترجع مكررات إلى العنصر الأول والعنصر الذي يلي الأخير.
  • std::advance() - تحريك المكرر بمقدار N موضعاً.
  • std::distance() - حساب المسافة بين مكررين.


مثال مع المكررات:

#include <iostream>#include <vector>

int main() { std::vector<std::string> words = {"Hello", "World", "C++"}; for (auto it = words.begin(); it != words.end(); ++it) { std::cout << *it << " "; } // الإخراج: Hello World C++ return 0;}


3. الخوارزميات (

توصيات