التكرار عبر المجموعة
جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 39 من 56.
الآن بعد أن أصبح بإمكانك إضافة العناصر والتحقق منها وإزالتها من المجموعة، دعنا نتعلم كيفية التكرار عبر جميع العناصر في المجموعة. توفر حلقة for المستندة إلى النطاق (range-based for loop) الطريقة الأكثر سلاسة لزيارة كل عنصر.
إليك كيفية التكرار عبر مجموعة (set):
std::set<std::string> fruits = {"banana", "apple", "cherry"};
for (const std::string& fruit : fruits) {
std::cout << fruit << std::endl;
}أهم ميزة يجب تذكرها هي أن المجموعات (sets) تحافظ تلقائيًا على ترتيب فرز محدد. عندما تقوم بالتكرار عبر مجموعة fruits أعلاه، سيكون الناتج "apple" و "banana" و "cherry" - وليس الترتيب الذي أدخلتها به. هذا الفرز التلقائي هو أحد المزايا الرئيسية لاستخدام std::set.
تجعل عملية التكرار المرتبة هذه المجموعات (sets) مثالية لعرض البيانات بترتيب أبجدي أو رقمي دون الحاجة إلى الفرز يدويًا. سواء كنت تعمل مع الأرقام، أو السلاسل النصية، أو أنواع أخرى قابلة للمقارنة، فإن المجموعة ستعرضها دائمًا في تسلسلها المرتب الطبيعي.
التحدي
سهلقم بإنشاء برنامج يوضح ميزة الفرز التلقائي لـ std::set عن طريق إضافة كلمات إلى مجموعة (set) ثم المرور عليها لعرضها بترتيب أبجدي. سيختبر هذا التحدي فهمك لحلقات for المبنية على النطاق (range-based for loops) مع المجموعات وكيفية محافظة المجموعات على الترتيب.
سيتم توفير المدخلات التالية:
- عدد صحيح
nيمثل عدد الكلمات المراد إضافتها إلى المجموعة - ثم
nمن السلاسل النصية (strings) التي تمثل الكلمات المراد إدراجها في المجموعة
يجب على برنامجك القيام بما يلي:
- إنشاء
std::set<std::string>فارغة - قراءة عدد الكلمات المراد إضافتها
- استخدام حلقة تكرار لقراءة كل كلمة وإدراجها في المجموعة باستخدام طريقة
.insert() - استخدام حلقة for مبنية على النطاق للمرور عبر المجموعة وطباعة كل كلمة
- بعد طباعة جميع الكلمات، قم بعرض العدد الإجمالي للكلمات الفريدة في المجموعة
استخدم تنسيق المخرجات الدقيق التالي:
لكل كلمة في المجموعة (بالترتيب الأبجدي):
[word]الملخص في النهاية:
Total unique words: [count]استخدم حلقة for مبنية على النطاق بالصيغة for (const std::string& word : wordSet) للمرور عبر جميع العناصر في المجموعة. ستقوم المجموعة تلقائياً بعرض الكلمات بترتيب أبجدي، مما يوضح إحدى المزايا الرئيسية لاستخدام std::set. تذكر أنه إذا تم توفير كلمات مكررة في المدخلات، فسيتم تجاهلها تلقائياً بواسطة المجموعة، بحيث يتم عرض الكلمات الفريدة فقط.
ورقة مرجعية
استخدم حلقة for المبنية على النطاق (range-based for loop) للتكرار عبر جميع العناصر في المجموعة (set):
std::set<std::string> fruits = {"banana", "apple", "cherry"};
for (const std::string& fruit : fruits) {
std::cout << fruit << std::endl;
}تحافظ المجموعات (Sets) تلقائيًا على الترتيب المفرز أثناء التكرار. يتم عرض العناصر في تسلسلها المفرز الطبيعي (أبجديًا للسلاسل النصية، ورقميًا للأرقام)، وليس بترتيب الإدراج.
جرّب بنفسك
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
// قراءة عدد الكلمات
int n;
cin >> n;
// إنشاء مجموعة فارغة لتخزين الكلمات
set<string> wordSet;
// TODO: اكتب الكود الخاص بك هنا
// اقرأ n من الكلمات وأدخلها في المجموعة
// استخدم حلقة for المبنية على النطاق للمرور عبر المجموعة وطباعة كل كلمة
// اطبع العدد الإجمالي للكلمات الفريدة
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector6المجموعات (عناصر فريدة)
مقدمة إلى std::setإنشاء مجموعة وإضافة عناصرالتحقق من وجود العناصرإزالة العناصرالتكرار عبر المجموعةملخص - أرقام فريدة