التكرار باستخدام For Loop
جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 14 من 56.
الآن بعد أن عرفت كيفية الوصول إلى العناصر الفردية والتحقق من حجم المتجه (vector)، دعنا نتعلم كيفية معالجة كل عنصر بشكل منهجي باستخدام حلقة for التقليدية. يجمع هذا النهج بين طريقة .size() والوصول القائم على الفهرس لزيارة كل عنصر بالتسلسل.
تستخدم حلقة for التقليدية متغيراً للفهرس (index) يبدأ من 0 ويزداد حتى يصل إلى حجم المتجه (vector):
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (int i = 0; i < names.size(); i++) {
std::cout << names[i] << std::endl;
}في هذا المثال، يضمن شرط الحلقة i < names.size() عدم تجاوز حدود المتجه (vector)، بينما يقوم names[i] بالوصول إلى كل عنصر باستخدام الفهرس الحالي. ستقوم الحلقة بطباعة كل اسم في سطر منفصل.
هذا النمط أساسي لمعالجة مجموعات البيانات. يمنحك متغير الفهرس i تحكماً دقيقاً في العنصر الذي تعمل معه، مما يجعله مفيداً عندما تحتاج إلى معرفة موضع كل عنصر أو عندما تريد تعديل العناصر أثناء التكرار.
التحدي
سهلقم بإنشاء برنامج يستخدم حلقة for التقليدية للتكرار عبر vector من أسماء المنتجات وعرضها بتنسيق قائمة مرقمة.
سيتم توفير المدخلات التالية:
- عدد صحيح
nيمثل عدد المنتجات - ثم
nمن السلاسل النصية (strings) التي تمثل أسماء المنتجات
يجب على برنامجك القيام بما يلي:
- إنشاء
std::vector<std::string>باسمproducts - استخدام
push_back()لإضافة كل اسم من أسماء المنتجات الـnإلى الـ vector - استخدام حلقة for تقليدية مع متغير فهرس (index variable) للتكرار عبر الـ vector
- في الحلقة، استخدم طريقة
.size()لشرط الحلقة - استخدم عامل الأقواس المربعة
[]للوصول إلى كل عنصر عن طريق الفهرس - طباعة كل منتج مع رقم موقعه (بدءاً من 1) بالتنسيق المحدد
استخدم تنسيق المخرجات الدقيق التالي:
Product 1: [first product name]
Product 2: [second product name]
Product 3: [third product name]
...يجب أن تبدأ حلقة for بالفهرس 0، وتستخدم i < products.size() كشرط، وتزيد i في كل تكرار. عند الطباعة، أضف 1 إلى الفهرس لعرض أرقام المواقع بدءاً من 1.
ورقة مرجعية
استخدم حلقة for التقليدية للتكرار عبر vector من خلال دمج .size() مع الوصول المستند إلى الفهرس:
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (int i = 0; i < names.size(); i++) {
std::cout << names[i] << std::endl;
}يضمن شرط الحلقة i < names.size() عدم تجاوز حدود الـ vector، بينما names[i] يصل إلى كل عنصر باستخدام الفهرس الحالي. يوفر لك متغير الفهرس تحكماً دقيقاً في العنصر الذي تعمل معه ويسمح لك بمعرفة موقع كل عنصر.
جرّب بنفسك
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
// قراءة عدد المنتجات
int n;
cin >> n;
// إنشاء متجه (vector) لتخزين أسماء المنتجات
vector<string> products;
// قراءة أسماء المنتجات وإضافتها إلى المتجه
for (int i = 0; i < n; i++) {
string product;
cin >> product;
products.push_back(product);
}
// مهام: اكتب الكود الخاص بك أدناه
// استخدم حلقة for تقليدية للمرور عبر المتجه
// وطباعة كل منتج مع رقم موقعه
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector