لغة C ++ هي واحدة من أقوى لغات البرمجة وأكثرها إثارة للرعب التي قد تواجهها كمبتدئ. السبب واضح ومباشر. يتطلب الكثير من التعليمات البرمجية لتحقيق الإخراج المطلوب. يمكن أن تساعدك مكتبة القوالب القياسية أو STL في حل هذا اللغز.

بالنظر إلى مقدار الوقت والجهد المستغرق أثناء كتابة التعليمات البرمجية لوظائف مثل الفرز والبحث ، يمكن أن تساعدك STL في تنفيذ كل هذه العمليات بسطر واحد فقط من التعليمات البرمجية. يمكن أن تكون هذه المكتبة مفيدة للغاية لحل المشكلات والتحضير للمقابلات الفنية.

ما هي مكتبة النماذج القياسية؟

مكتبة القوالب القياسية ، أو STL ، هي مكتبة C ++ تتكون من وظائف وحاويات تم إنشاؤها مسبقًا. يتضمن بعض فئات القوالب البارزة لهياكل البيانات الشائعة مثل المتجهات والمكدسات وقوائم الانتظار وبعض الوظائف الخوارزمية المفيدة مثل البحث الثنائي لتسهيل البرمجة.

تتكون مكتبة النماذج القياسية في C ++ من أربعة مكونات:

  1. الخوارزميات
  2. حاويات
  3. المهام
  4. التكرارات

دعنا نلقي نظرة على الخوارزميات والحاويات بعمق أكبر ، حيث إنها أكثر المكونات شيوعًا في المحكمة الخاصة بلبنان.

الخوارزميات في المحكمة الخاصة بلبنان

instagram viewer

ال يعد ملف الرأس جزءًا من STL يتكون من عدة وظائف خوارزمية يمكن استخدامها بدلاً من ترميزها يدويًا. بعض الخوارزميات المضمنة هي البحث الثنائي ، والفرز ، والعكس ، وهي مفيدة للغاية.

لتبدأ ، تحتاج إلى استيراد ملف header في ملف C ++ الخاص بك. بناء الجملة كما يلي:

#تضمن 

بالنسبة إلى العمليات التالية ، ضع في اعتبارك متغير مصفوفة بقيم {6 ، 2 ، 9 ، 1 ، 4} كمثال.

int arr [] = {6، 2، 9، 1، 4} ؛

فرز()

ال فرز() تساعدك الوظيفة على فرز جميع العناصر داخل بنية البيانات المحددة بترتيب تصاعدي. تأخذ هذه الوظيفة معلمتين: مكرر البداية ومكرر النهاية.

متعلق ب: مقدمة لخوارزمية دمج الفرز

بناء الجملة:

فرز (start_iterator ، end_iterator) ؛

إليك مثال سريع:

فرز (arr ، arr + 5) ؛
لـ (int i = 0 ؛ أنا <5 ؛ أنا ++) {
cout << arr [i] << ""؛
}

انتاج:

1 2 4 6 9

يعكس()

ال يعكس() وظيفة تعكس ترتيب العناصر في بنية البيانات المحددة. يقبل معلمتين: مكرر البداية ومكرر النهاية.

بناء الجملة:

عكس (start_iterator ، end_iterator) ؛

فيما يلي مثال قصير للطريقة المذكورة أعلاه:

عكس (arr ، arr + 5) ؛
لـ (int i = 0 ؛ أنا <5 ؛ أنا ++) {
cout << arr [i] << ""؛
}

انتاج:

4 1 9 2 6

* min_element () و * max_element ()

وظائف * max_element () و * min_element () إرجاع الحد الأقصى والحد الأدنى للقيمة داخل بنية البيانات المحددة ، على التوالي. تقبل هاتان الوظيفتان وسيطتين: مكرر البداية ومكرر النهاية.

بناء الجملة:

* max_element (start_iterator ، end_iterator) ؛
* min_element (start_iterator ، end_iterator) ؛

دعونا نتعرف على القيم التي تعيدها هذه الوظائف عند استدعائها في مثال المصفوفة:

cout << * max_element (arr، arr + 5) << endl؛
cout << * min_element (arr، arr + 5) << endl؛

انتاج:

9
1

بحث ثنائي()

ال بحث ثنائي() يتم استخدام الطريقة لمعرفة ما إذا كانت القيمة المحددة موجودة داخل بنية البيانات أم لا. يقبل ثلاث وسيطات: مكرر البداية ، ومكرر النهاية ، والقيمة التي تريد البحث عنها.

يعمل البحث الثنائي فقط على هياكل البيانات التي تم فرزها. لذلك ، سوف تحتاج إلى استدعاء فرز() الطريقة الأولى قبل بحث ثنائي() طريقة.

بناء الجملة:

binary_search (start_iterator، end_iterator، value_to_find)

إليك عرض توضيحي لهذه الطريقة:

فرز (arr ، arr + 5) ؛
binary_search (arr، arr + 5، 2)؟ cout << "تم العثور على العنصر": cout << "Element not found"؛
binary_search (arr، arr + 5، 7)؟ cout << "تم العثور على العنصر": cout << "Element not found"؛

انتاج:

تم العثور على العنصر
العنصر غير موجود

عدد()

ال عدد() طريقة إرجاع عدد تواجد القيمة المحددة داخل بنية البيانات. يتطلب الأمر ثلاث وسيطات: مكرر البداية ، ومكرر النهاية ، والقيمة المطلوب حسابها.

بناء الجملة:

العد (start_iterator ، end_iterator ، value_to_count) ؛

فيما يلي مثال على هذه الطريقة:

cout << count (arr، arr + 5، 2) << endl؛

انتاج:

1

حاويات في STL

الحاويات هي هياكل البيانات التي تخزن الكائنات والبيانات. المتجهات والقوائم والمكدسات وقوائم الانتظار والمجموعات والخرائط هي بعض الأمثلة التي تخزن البيانات فيها وفقًا لنوع البيانات البدائي المحدد. يمكنك استخدام هذه الحاويات عن طريق استيراد الرؤوس الخاصة بها في ملف C ++.

أثناء تهيئة متغير الحاوية ، تحتاج إلى ذكر البيانات الأولية مثل int, شار, خيط داخل <> اقواس.

دعنا نستكشف بعض هذه الحاويات بمزيد من التفصيل:

المتجه

المتجهات عبارة عن مصفوفات ديناميكية يمكن تغيير حجمها ومرنة للعمل معها. عندما تقوم بإدراج عنصر أو حذفه من المتجه ، فإنه يضبط حجم المتجه تلقائيًا. هذا مشابه لـ بنية بيانات ArrayList في جافا.

بناء الجملة:

#تضمن 
المتجه اسم المتغير؛

فيما يلي بعض طرق المتجهات المهمة:

  1. push_back (القيمة): تلحق هذه الطريقة البيانات بالمتجه.
  2. عودة البوب(): هذه الطريقة تزيل العنصر الأخير من المتجه.
  3. إدراج (فهرس ، قيمة): تقوم هذه الطريقة بإدراج عناصر جديدة قبل العنصر في الموضع المحدد.
  4. بحجم(): هذه الطريقة ترجع حجم المتجه.
  5. فارغة(): هذه الطريقة تتحقق مما إذا كان المتجه فارغًا أم لا.
  6. أمام(): تُرجع هذه الطريقة القيمة الأولى للمتجه.
  7. عودة(): طريقة الرجوع تُرجع القيمة الأخيرة للمتجه.
  8. في (فهرس): تقوم هذه الطريقة بإرجاع القيمة في الموضع المحدد.
  9. مسح (فهرس): طريقة المسح تزيل العناصر من الفهرس المحدد.
  10. صافي(): تقوم هذه الطريقة بمسح جميع العناصر الموجودة في المتجه.
المتجه  v = {23، 12، 56، 10} ؛
v.push_back (5) ؛
v.push_back (25) ؛
v.pop_back () ،
تلقائي i = v.insert (v.begin () + 1، 7) ؛
cout << "حجم المتجه المحدد" << v.size () << endl؛
إذا (v.empty ()) {
cout << "الموجه فارغ" << endl؛
} آخر {
cout << "الموجه ليس فارغًا" << endl؛
}
cout << "العنصر في المركز الأول هو" << v.front () << endl؛
cout << "العنصر في الموضع الأخير هو" << v.back () << endl؛
cout << "العنصر الموجود في الموضع المحدد هو" << v.at (4) << endl؛
v.erase (v.begin () + 1) ؛
لـ (int i = 0 ؛ أنا cout << v [i] << ""؛
}

انتاج:

حجم المتجه المحدد 6
الموجه ليس فارغًا
العنصر في المركز الأول هو 23
العنصر في الموضع الأخير هو 5
العنصر في الموضع المحدد هو 10
23 12 56 10 5

طابور

في هيكل بيانات قائمة الانتظار ، يتم إدخال العناصر من الخلف وحذفها من الأمام. ومن ثم ، فإنه يتبع نهج FIFO ("ما يدخل أولاً ، يخرج أولاً").

بناء الجملة:

#تضمن 
طابور اسم المتغير؛

فيما يلي بعض طرق قائمة الانتظار المهمة:

  1. دفع (القيمة): تضيف هذه الطريقة عناصر إلى قائمة الانتظار.
  2. البوب ​​(): هذا الأسلوب يحذف العنصر الأول من قائمة الانتظار.
  3. بحجم(): تقوم هذه الطريقة بإرجاع حجم قائمة الانتظار.
  4. أمام(): تقوم هذه الطريقة بإرجاع العنصر الأول من قائمة الانتظار.
  5. عودة(): تقوم هذه الطريقة بإرجاع العنصر الأخير في قائمة الانتظار.
قائمة الانتظار  q ؛
q.push (30) ؛
q.push (40) ؛
q.push (50) ؛
q.push (60) ؛
q.push (70) ؛
cout << "العنصر الأول هو" << q.front () << endl؛
cout << "العنصر الأخير هو" << q.back () << endl؛
cout << "حجم قائمة الانتظار هو" << q.size () << endl؛
q.pop () ؛
cout << "طباعة كافة عناصر قائمة الانتظار" << endl؛
بينما (! q.empty ()) {
cout << q.front () << ""؛
q.pop () ؛
}

انتاج:

العنصر الأول هو 30
العنصر الأخير هو 70
حجم قائمة الانتظار هو 5
طباعة كافة عناصر قائمة الانتظار
40 50 60 70

كومة

تعمل حاويات المكدس بطريقة LIFO. LIFO تعني "أخيرًا ما يخرج أولاً". يتم دفع البيانات وتفرقعها من نفس النهاية.

بناء الجملة:

#تضمن 
كومة اسم المتغير؛

فيما يلي بعض طرق التكديس المهمة:

  1. دفع (القيمة): تدفع هذه الطريقة العنصر في المكدس.
  2. البوب ​​(): هذه الطريقة تحذف العنصر العلوي من المكدس.
  3. أعلى(): ترجع هذه الطريقة قيمة العنصر الأخير الذي تم إدخاله في المكدس.
  4. بحجم(): تقوم هذه الطريقة بإرجاع حجم المكدس.
  5. فارغة(): هذه الطريقة تتحقق مما إذا كانت المكدس فارغة أم لا.
كومة  s ؛
s.push (30) ؛
s.push (40) ؛
s.push (50) ؛
s.push (60) ؛
يحتوي cout << "الجزء العلوي من المكدس على" << s.top () << endl؛
s.pop () ؛
cout << "الجزء العلوي من المكدس بعد إجراء عملية البوب:" << s.top () << endl؛
cout << "طباعة كافة عناصر المكدس" << endl؛
بينما (! s.empty ()) {
cout << s.top () << "" ؛
s.pop () ؛
}

انتاج:

يحتوي الجزء العلوي من المكدس على 60
الجزء العلوي من المكدس بعد إجراء عملية فرقعة: 50
طباعة جميع عناصر المكدس
50 40 30

جلس

تُستخدم حاويات المجموعة للاحتفاظ بقيم فريدة ، ولا يمكن تغيير قيمة العنصر بمجرد إدراجه في المجموعة. يتم تخزين جميع العناصر في المجموعة بطريقة مرتبة. حاوية المجموعة مشابهة لـ تعيين بنية البيانات في بايثون.

بناء الجملة:

#تضمن 
جلس اسم المتغير؛

فيما يلي بعض طرق المجموعة المهمة:

  1. أدخل (القيمة): هذه الطريقة تُدرج العناصر في المجموعة.
  2. يبدأ(): تعيد هذه الطريقة المكرر إلى العنصر الأول من المجموعة.
  3. نهاية(): تعيد هذه الطريقة المكرر إلى العنصر الأخير في المجموعة.
  4. بحجم(): هذه الطريقة ترجع حجم المجموعة.
  5. فارغة(): هذه الطريقة تتحقق مما إذا كانت المجموعة فارغة أم لا.
  6. تجد (القيمة): تعيد هذه الطريقة المكرر إلى العنصر الذي تم تمريره في المعلمة. إذا لم يتم العثور على العنصر ، فستعيد هذه الوظيفة مكررًا إلى نهاية المجموعة.
  7. محو (القيمة): هذه الطريقة حذف العنصر المحدد من المجموعة.
مجموعة  s ؛
s.insert (20) ؛
s.insert (30) ؛
s.insert (40) ؛
s.insert (50) ؛
s.insert (60) ؛
s.insert (60) ؛
s.insert (60) ؛
تلقائي i = s.begin () ؛
cout << "Element at the first position" << * i << endl؛
cout << "حجم المجموعة" << s.size () << endl؛
s. أوجد (20)! = s.end ()؟ cout << "تم العثور على العنصر" << endl: cout << "لم يتم العثور على العنصر" << endl؛
s.erase (30) ؛
cout << "printing all the element" << endl؛
لـ (auto i = s.begin () ؛ أنا! = s.end () ؛ أنا ++) {
cout << * i << ""؛
}

انتاج:

20 عنصر في المركز الأول
حجم المجموعة 5
تم العثور على العنصر
طباعة كافة العناصر
20 40 50 60

C ++ لا يجب أن يكون صعبًا

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

ومع ذلك ، إذا كانت هذه هي المرة الأولى التي تتعلم فيها C ++ ، فابدأ بتعلم الأساسيات قبل المتابعة لفهم STL.

بريد إلكتروني
كيف تتعلم برمجة C ++: 6 مواقع للبدء

هل تريد تعلم C ++؟ فيما يلي أفضل المواقع والدورات عبر الإنترنت لـ C ++ للمبتدئين والمبرمجين ذوي الخبرة على حد سواء.

اقرأ التالي

مواضيع ذات صلة
  • برمجة
  • دروس الترميز
  • البرمجة الوظيفية
عن المؤلف
نيتين رانجاناث (تم نشر 22 مقالة)

نيتين هو مطور برمجيات متحمس وطالب هندسة كمبيوتر يطور تطبيقات الويب باستخدام تقنيات جافا سكريبت. يعمل كمطور ويب مستقل ويحب الكتابة لنظام Linux والبرمجة في أوقات فراغه.

المزيد من Nitin Ranganath

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

خطوة أخرى أيضا…!

يرجى تأكيد عنوان بريدك الإلكتروني في البريد الإلكتروني الذي أرسلناه لك للتو.

.