المفاهيم الأساسية لمكتبة C ++ القياسية

تعرّف هذه المقالة المفاهيم الأساسية لمكتبة 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); } }; 

لقراءة مستقلة


  1. C ++ 20 مشروع على جيثب
  2. مرجع C ++
  3. تطوير تطبيق C ++
  4. Range-v3 ، اقتراح لمعيار

Source: https://habr.com/ru/post/ar434986/


All Articles