الأمراض المنقولة جنسيا::قائمة في C++ مع المثال
ما هي الأمراض المنقولة جنسيا :: القائمة؟
In C++، تشير القائمة std::list إلى حاوية تخزين. تتيح لك القائمة std:list إدراج العناصر وإزالتها من أي مكان. يتم تنفيذ قائمة std::list كقائمة مرتبطة بشكل مزدوج. وهذا يعني أنه يمكن الوصول إلى بيانات القائمة بشكل ثنائي الاتجاه وبالتسلسل.
لا تدعم قائمة مكتبة النماذج القياسية الوصول العشوائي السريع، ولكنها تدعم الوصول المتسلسل من كافة الاتجاهات.
يمكنك تشتيت عناصر القائمة في أجزاء ذاكرة مختلفة. يتم تخزين المعلومات اللازمة للوصول التسلسلي إلى البيانات في حاوية. يمكن أن تتوسع القائمة std::list وتتقلص من كلا الطرفين حسب الحاجة أثناء وقت التشغيل. يقوم المُخصص الداخلي تلقائيًا بالوفاء بمتطلبات التخزين.
لماذا استخدام الأمراض المنقولة جنسيا :: القائمة؟
فيما يلي سبب استخدام std::List :
- تعمل قائمة std::list بشكل أفضل مقارنة بحاويات التسلسل الأخرى مثل المصفوفة والمتجهات.
- لديهم أداء أفضل في إدراج العناصر ونقلها واستخراجها من أي موضع.
- كما تعمل std::list بشكل أفضل مع الخوارزميات التي تقوم بتنفيذ مثل هذه العمليات بشكل مكثف.
بناء جملة القائمة
لتحديد std::list، علينا استيراد ملف الملف الاساسي. فيما يلي بناء جملة تعريف std::list:
template < class Type, class Alloc =allocator<T> > class list;
فيما يلي وصف للمعلمات المذكورة أعلاه:
- T - يحدد نوع العنصر المتضمن. يمكنك استبدال T بأي نوع بيانات، حتى الأنواع المحددة من قبل المستخدم.
- تخصيص - يحدد نوع كائن المخصص. ويستخدم هذا قالب فئة المخصص بشكل افتراضي. إنها تعتمد على القيمة وتستخدم نموذجًا بسيطًا لتخصيص الذاكرة.
أمثلة 1
#include <algorithm>
#include <iostream>
#include <list>
int main() {
std::list<int> my_list = { 12, 5, 10, 9 };
for (int x : my_list) {
std::cout << x << '\n';
}
}
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- قم بتضمين ملف رأس الخوارزمية لاستخدام وظائفه.
- قم بتضمين ملف رأس iostream لاستخدام وظائفه.
- قم بتضمين ملف رأس القائمة لاستخدام وظائفه.
- استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل نص هذه الوظيفة.
- أنشئ قائمة باسم my_list تحتوي على مجموعة مكونة من 4 أعداد صحيحة.
- استخدم حلقة for لإنشاء متغير حلقة x. سيتم استخدام هذا المتغير للتكرار على عناصر القائمة.
- اطبع قيم القائمة على وحدة التحكم.
- نهاية الجسم لحلقة.
- نهاية نص الدالة main().
C++ وظائف القائمة
فيما يلي وظائف std::list الشائعة:
| الوظيفة | الوصف |
|---|---|
| إدراج() | تقوم هذه الوظيفة بإدراج عنصر جديد قبل الموضع الذي يشير إليه المكرر. |
| إدفع إلى الخلف() | تضيف هذه الوظائف عنصرًا جديدًا في نهاية القائمة. |
| Push_front() | يضيف عنصرًا جديدًا في مقدمة القائمة. |
| pop_front() | يقوم بحذف العنصر الأول في القائمة. |
| بحجم() | تحدد هذه الوظيفة عدد عناصر القائمة. |
| أمام() | لتحديد العناصر الأولى في القائمة. |
| خلف() | لتحديد العنصر الأخير في القائمة. |
| عكس () | إنه يعكس عناصر القائمة. |
| دمج() | فهو يدمج قائمتين مرتبة. |
البنائين
وهنا لائحة وظائف المقدمة من الملف الاساسي:
- المُنشئ الافتراضي std::list::list()- يقوم بإنشاء قائمة فارغة تحتوي على صفر عناصر.
- منشئ التعبئة std::list::list()- يقوم بإنشاء قائمة تحتوي على عناصر n ويعين قيمة صفر (0) لكل عنصر.
- منشئ النطاق std::list::list()- ينشئ قائمة تحتوي على العديد من العناصر في النطاق من الأول إلى الأخير.
- منشئ النسخ std::list::list()- يقوم بإنشاء قائمة تحتوي على نسخة من كل عنصر موجود في القائمة الموجودة.
- منشئ النقل std::list::list()- ينشئ قائمة بعناصر قائمة أخرى باستخدام دلالات النقل.
- منشئ قائمة التهيئة std::list::list() - يقوم بإنشاء قائمة بعناصر قائمة أخرى باستخدام دلالات النقل.
مثال 2
#include <iostream>
#include <list>
using namespace std;
int main(void) {
list<int> l;
list<int> l1 = { 10, 20, 30 };
list<int> l2(l1.begin(), l1.end());
list<int> l3(move(l1));
cout << "Size of list l: " << l.size() << endl;
cout << "List l2 contents: " << endl;
for (auto it = l2.begin(); it != l2.end(); ++it)
cout << *it << endl;
cout << "List l3 contents: " << endl;
for (auto it = l3.begin(); it != l3.end(); ++it)
cout << *it << endl;
return 0;
}
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- قم بتضمين ملف رأس iostream لاستخدام وظائفه.
- قم بتضمين ملف رأس القائمة لاستخدام وظائفه.
- قم بتضمين مساحة الاسم std في الكود لاستخدام فئاتها دون استدعائها.
- استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل نص هذه الوظيفة.
- أنشئ قائمة فارغة باسم l.
- أنشئ قائمة باسم l1 تحتوي على مجموعة مكونة من 3 أعداد صحيحة.
- أنشئ قائمة باسم l2 بجميع العناصر الموجودة في القائمة المسماة l1، من البداية إلى النهاية.
- أنشئ قائمة باسم l3 باستخدام دلالات النقل. ستحتوي القائمة l3 على نفس محتويات القائمة l2.
- اطبع حجم القائمة المسماة l على وحدة التحكم بجانب النص الآخر.
- طباعة بعض النص على وحدة التحكم.
- قم بإنشاء مكرر اسمه واستخدمه للتكرار على عناصر القائمة المسماة l2.
- اطبع عناصر القائمة المسماة l2 على وحدة التحكم.
- طباعة بعض النص على وحدة التحكم.
- قم بإنشاء مكرر اسمه واستخدمه للتكرار على عناصر القائمة المسماة l3.
- اطبع عناصر القائمة المسماة l3 على وحدة التحكم.
- يجب أن يقوم البرنامج بإرجاع القيمة عند اكتماله بنجاح.
- نهاية نص الدالة main().
خصائص حاوية
فيما يلي قائمة بخصائص الحاوية:
| الممتلكات | الوصف |
|---|---|
| تسلسل | تقوم حاويات التسلسل بترتيب عناصرها بتسلسل خطي صارم. يتم الوصول إلى العناصر من خلال موقعها في التسلسل. |
| قائمة مرتبطة بشكل مزدوج | يحتوي كل عنصر على معلومات حول كيفية تحديد العناصر السابقة والتالية. وهذا يسمح بوقت ثابت لعمليات الإدخال والحذف. |
| المُخصص - على علم | يتم استخدام كائن المخصص لتعديل حجم التخزين ديناميكيًا. |
الإدراج في القائمة
هناك وظائف مختلفة يمكننا استخدامها لإدراج القيم في القائمة. دعونا نوضح هذا:
مثال 3
#include <algorithm>
#include <iostream>
#include <list>
int main() {
std::list<int> my_list = { 12, 5, 10, 9 };
my_list.push_front(11);
my_list.push_back(18);
auto it = std::find(my_list.begin(), my_list.end(), 10);
if (it != my_list.end()) {
my_list.insert(it, 21);
}
for (int x : my_list) {
std::cout << x << '\n';
}
}
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- قم بتضمين ملف رأس الخوارزمية لاستخدام وظائفه.
- قم بتضمين ملف رأس iostream لاستخدام وظائفه.
- قم بتضمين ملف رأس القائمة لاستخدام وظائفه.
- استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل نص هذه الوظيفة.
- أنشئ قائمة باسم my_list تحتوي على مجموعة مكونة من 4 أعداد صحيحة.
- أدخل العنصر 11 في مقدمة القائمة المسماة my_list.
- أدخل العنصر 18 في نهاية القائمة المسماة my_list.
- قم بإنشاء مكرر واستخدمه للعثور على العنصر 10 من القائمة my_list.
- استخدم عبارة if لتحديد ما إذا تم العثور على العنصر أعلاه أم لا.
- أدخل العنصر 21 قبل العنصر أعلاه إذا وجد.
- نهاية نص عبارة if.
- استخدم حلقة for لإنشاء متغير حلقة x. سيتم استخدام هذا المتغير للتكرار على عناصر القائمة.
- اطبع قيم القائمة على وحدة التحكم.
- نهاية جسم الحلقة.
- نهاية نص الدالة main().
الحذف من القائمة
من الممكن حذف العناصر من القائمة. تتيح لك وظيفة المسح () حذف عنصر أو مجموعة من العناصر من القائمة.
- لحذف عنصر واحد، ما عليك سوى تمرير موضع عدد صحيح واحد. سيتم حذف العنصر.
- لحذف نطاق، يمكنك تمرير مكررات البداية والنهاية. دعونا نظهر هذا.
مثال 4
#include <algorithm>
#include <iostream>
#include <list>
using namespace std;
int main() {
std::list<int> my_list = { 12, 5, 10, 9 };
cout << "List elements before deletion: ";
for (int x : my_list) {
std::cout << x << '\n';
}
list<int>::iterator i = my_list.begin();
my_list.erase(i);
cout << "\nList elements after deletion: ";
for (int x : my_list) {
std::cout << x << '\n';
}
return 0;
}
الإخراج:
هنا لقطة شاشة للكود:
شرح الكود:
- قم بتضمين ملف رأس الخوارزمية لاستخدام وظائفه.
- قم بتضمين ملف رأس iostream لاستخدام وظائفه.
- قم بتضمين ملف رأس القائمة لاستخدام وظائفه.
- قم بتضمين مساحة الاسم std في برنامجنا لاستخدام فئاتها دون استدعائها.
- استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل نص هذه الوظيفة.
- أنشئ قائمة باسم my_list تحتوي على مجموعة مكونة من 4 أعداد صحيحة.
- طباعة بعض النص على وحدة التحكم.
- استخدم حلقة for لإنشاء متغير حلقة x. سيتم استخدام هذا المتغير للتكرار على عناصر القائمة.
- اطبع قيم القائمة على وحدة التحكم.
- نهاية جسم الحلقة.
- قم بإنشاء مكرر i يشير إلى العنصر الأول في القائمة.
- استخدم وظيفة المسح () التي يشير إليها المكرر i.
- طباعة بعض النص على وحدة التحكم.
- استخدم حلقة for لإنشاء متغير حلقة x. سيتم استخدام هذا المتغير للتكرار على عناصر القائمة.
- اطبع قيم القائمة على وحدة التحكم. وهذا يأتي بعد الحذف
- نهاية جسم الحلقة.
- يجب أن يقوم البرنامج بإرجاع قيمة عند اكتماله بنجاح.
- نهاية نص الدالة main().
ملخص
- القائمة std::list عبارة عن حاوية تخزين.
- يسمح بإدراج وحذف العناصر من أي مكان في وقت ثابت.
- يتم تنفيذه كرابط مزدوج
- يمكن الوصول إلى بيانات std::list بشكل ثنائي الاتجاه وبالتسلسل.
- لا تدعم القائمة std::list الوصول العشوائي السريع. ومع ذلك، فهو يدعم الوصول التسلسلي من جميع الاتجاهات.
- يمكنك تشتيت عناصر قائمة std::list في أجزاء ذاكرة مختلفة.
- يمكنك تقليص أو توسيع قائمة std::list من كلا الطرفين حسب الحاجة أثناء وقت التشغيل.
- لإدراج عناصر في قائمة std::list، نستخدم وظيفة الإدراج ().
- لحذف العناصر من القائمة std::list، نستخدم وظيفة المسح ().






