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

جميع المكونات تفي بعدد من المتطلبات ، لذلك ، في اتفاق جيد مع بعضها البعض.
من تعريف الحاوية ، يترتب على ذلك أن أي بنية بيانات مستخدم هي حاوية. في حالتنا ،
تحتوي الحاويات على هياكل بيانات قياسية ، مثل القائمة والمتجهات والقاموس وغير ذلك الكثير. المتطلبات الرسمية للحاويات واسعة جدًا ، لكن القاعدة الأساسية هي الوصول إلى العناصر. يتم الوصول إلى عناصر الحاوية من خلال كائنات خاصة -
التكرارات (انظر أدناه). قد لا تعرف كيفية وجود عناصر الحاوية في الذاكرة ، لكنك تعلم بالتأكيد أنه يمكن تكرار التكرارات بشكل متتابع ، وسيوفر كل منها الوصول إلى العنصر. يمكن الحصول على مكرر يشير إلى العنصر الأول باستخدام طريقة
التكرار start () ؛ حاوية. يمكن الحصول على مكرر يشير
إلى العنصر الأخير باستخدام طريقة
التكرار end () ؛ حاوية. بمعنى آخر ، توجد التكرارات في فترة
نصف فاصل (أو
نصف جملة) ، والتي يمكن كتابتها رسميًا كـ [start، end]. مثال حاوية إعلان:
struct a_container { struct an_iterator; an_iterator begin(); an_iterator end(); };
يقترح المعيار C ++ 20 المتوقع استخدام بنية تتضمن نطاقات نصف - نطاقات
التكرار هو كائن يتيح الوصول إلى عناصر الحاوية ويسمح لها بالفرز. التكرار هو خاصية الحاوية. في عمليات التطبيق الأولى للمكتبة القياسية C ++ ، تم تطبيق أداة التكرار كمؤشر لعنصر الحاوية. في عمليات التطبيق الحديثة ، هذه فئة تقوم بتغليف مؤشر إلى كائن حاوية.
المتطلبات الرئيسية للتكرارات هي وجود مشغلي إلغاء التسجيل وزيادة. أدناه هو إعلان حاوية مع التكرار.
template<typename TYPE> struct a_container { struct an_iterator { void operator++(); TYPE& operator*(); }; an_iterator begin(); an_iterator end(); };
لا يمكنني إعطاء تعريف أفضل للخوارزمية عن التعريف القياسي:
الخوارزمية هي سلسلة من الإجراءات التي تؤدي إلى النتيجة المرجوة في عدد محدود من الخطوات .
في حالة STL ، يتم تنفيذ الخوارزميات بواسطة وظائف القالب التي تأخذ نصف فترات التكرارات كمعلمات إدخال. يوصف التوقيع العام لهذه الخوارزميات على النحو التالي:
template<typename ITERATOR, typename RESULT> RESULT an_algorithm(ITERATOR first, ITERATOR last, ...);
في إعلان فئة ، يمكنك تجاوز عامل التشغيل (). إذا تم تجاوز عامل التشغيل هذا في فصل دراسي ، فستتلقى كائنات هذا الفصل خصائص الدوال (يمكن استخدامها كوظائف). وتسمى هذه الأشياء الوظيفية أو
functor . من المريح استخدام عوامل التوجيه عندما يكون للوظيفة "ذاكرة" ، وكذلك استبدال المؤشرات بالوظائف.
بدءاً من معيار C ++ 11 ، هناك إمكانية لتدوين مختصر لوظائف الدالات - وظائف لامدا.
لا توجد متطلبات خاصة للجهات المشغلة. ما لم تكن هناك حاجة في بعض الأحيان إلى الميراث من
وظيفة functor (حتى معيار C ++ 11 - unary_function أو binary_function). مثال صغير على تطبيق functor:
template<typename TYPE> struct plus{ TYPE operator ()(const TYPE& p1, const TYPE& p2) const{ return p1 + p2; } };
تقدم STL أيضًا عددًا من الفئات والوظائف (الوظائف) التي تحول الواجهة إلى الواجهة الصحيحة. على وجه الخصوص ، هناك محول مكدس يقوم بتنفيذ مكدس استناداً إلى الحاويات. على سبيل المثال ، يمكننا النظر في محول دالة ثنائية إلى وظيفة واحدة (في هذه اللحظة يتم إهمال هذه الوظيفة في معيار C ++):
template<typename BIDIRECTIONAL_FUNCTION, typename TYPE> class bind1st { BIDIRECTIONAL_FUNCTION _bf; TYPE _first; public: bind1st(BIDIRECTIONAL_FUNCTION bf, TYPE first): _bf(bf), _first(first) {} TYPE operator()(const TYPE& p) const { return _bf(_first, p); } };
لقراءة مستقلة
- C ++ 20 مشروع على جيثب
- مرجع C ++
- تطوير تطبيق C ++
- Range-v3 ، اقتراح لمعيار