مكتبة C++ القياسية: نظرة شاملة وأمثلة

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

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

ابدأ الدورة

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



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



المكونات الرئيسية للمكتبة القياسية



تنقسم المكتبة القياسية إلى عدة أقسام رئيسية:



  • STL (مكتبة القوالب القياسية) — الحاويات، المكررات، الخوارزميات، والكائنات الوظيفية.
  • الإدخال/الإخراج — التدفقات (iostream)، تدفقات الملفات (fstream)، تدفقات السلاسل النصية (sstream).
  • السلاسل النصية — الفئة std::string و std::string_view.
  • العمليات العددية — الدوال الرياضية (cmath)، الأرقام العشوائية (random)، الأعداد المركبة (complex).
  • تعدد الخيوط — الخيوط (thread)، كائنات المزامنة (mutexes)، المتغيرات الشرطية.
  • الأدوات المساعدة — std::optional، std::variant، std::any، المؤشرات الذكية (shared_ptr، unique_ptr).


حاويات STL



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



الحاويات المتسلسلة



  • std::vector — مصفوفة ديناميكية. وصول سريع حسب الفهرس، إدراج بطيء في المنتصف.
  • std::deque — طابور ثنائي الاتجاه. إدراج/حذف سريع من كلا الطرفين.
  • std::list — قائمة مزدوجة الارتباط. إدراج/حذف سريع في أي مكان، لكن وصول بطيء حسب الفهرس.


#include <iostream>#include <vector>

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


الحاويات الترابطية



  • std::set — مجموعة من العناصر الفريدة (مرتبة).
  • std::map — قاموس "مفتاح-قيمة" (مرتب حسب المفتاح).
  • std::unordered_set / std::unordered_map — جداول تجزئة (غير مرتبة ولكن أسرع).


#include <iostream>#include <map>

int main() { std::map<std::string, int> ages; ages["Alice"] = 30; ages["Bob"] = 25; for (const auto& [name, age] : ages) { std::cout << name << ": " << age << std::endl; } return 0;}


الخوارزميات



تحتوي مكتبة <algorithm> على أكثر من 100 خوارزمية للعمل مع التسلسلات: الفرز، البحث، النسخ، التحويل، إلخ. تعمل جميع الخوارزميات من خلال المكررات، مما يجعلها عالمية.



#include <iostream>#include <algorithm>#include <vector>

int main() { std::vector<int> v = {5, 2, 8, 1, 9}; std::sort(v.begin(), v.end()); // فرز تصاعدي auto it = std::find(v.begin(), v.end(), 8); if (it != v.end()) { std::cout << "تم العثور على: " << *it << std::endl; } return 0;}


العمل مع السلاسل النصية



توفر الفئة std::string طرقاً ملائمة للعمل مع النص: البحث، الاستبدال، الربط، المقارنة. في C++17 تمت إضافة std::string_view لعرض السلاسل النصية بدون امتلاك.



#include                    

توصيات