الوصول إلى العناصر
جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 12 من 56.
الآن بعد أن أصبحت قادراً على إنشاء المتجهات (vectors) وإضافة عناصر إليها، تحتاج إلى معرفة كيفية استرداد عناصر محددة من المتجه الخاص بك. توفر لغة C++ طريقتين رئيسيتين للوصول إلى العناصر الفردية: عامل الأقواس المربعة (square bracket operator) ووسيلة .at().
يعمل عامل الأقواس المربعة [] تماماً كما هو الحال مع المصفوفات العادية. يمكنك تحديد فهرس العنصر الذي تريد الوصول إليه:
std::vector<int> numbers = {10, 20, 30, 40};
int first = numbers[0]; // يحصل على 10
int third = numbers[2]; // يحصل على 30توفر الدالة .at() طريقة بديلة للوصول إلى العناصر مع وجود فرق مهم - فهي تتضمن التحقق من الحدود:
int first = numbers.at(0); // يحصل على 10
int third = numbers.at(2); // يحصل على 30الفرق الجوهري هو الأمان: إذا حاولت الوصول إلى فهرس غير موجود، يمكن أن يؤدي [] إلى سلوك غير متوقع، بينما سيقوم .at() بطرح استثناء لتنبيهك بالخطأ. لأغراض التعلم، كلتا الطريقتين تعملان بشكل جيد، ولكن .at() يوفر حماية إضافية ضد الوصول إلى مواقع غير صالحة في الـ vector الخاص بك.
التحدي
سهلأنشئ برنامجاً يوضح الوصول إلى عناصر المتجه (vector) من خلال استرجاع عناصر محددة من المتجه باستخدام كل من عامل الأقواس المربعة وطريقة .at().
سيتم توفير المدخلات التالية:
- عدد صحيح
nيمثل عدد العناصر في المتجه - ثم
nمن الأعداد الصحيحة لملء المتجه - عدد صحيح
index1يمثل الفهرس الأول للوصول إليه - عدد صحيح
index2يمثل الفهرس الثاني للوصول إليه
يجب أن يقوم برنامجك بما يلي:
- إنشاء
std::vector<int>باسمdata - استخدام
push_back()لإضافة كل من أرقام المدخلات الـnإلى المتجه - الوصول إلى العنصر الموجود في
index1باستخدام عامل الأقواس المربعة[]وتخزينه في متغير باسمvalue1 - الوصول إلى العنصر الموجود في
index2باستخدام طريقة.at()وتخزينه في متغير باسمvalue2 - طباعة القيم التي تم الوصول إليها والفهارس المقابلة لها
- طباعة العنصرين الأول والأخير من المتجه باستخدام الوصول القائم على الفهرس
استخدم تنسيق المخرجات الدقيق التالي:
Element at index [index1]: [value1]
Element at index [index2]: [value2]
First element: [first value]
Last element: [last value]للوصول إلى العنصر الأخير، استخدم data.size() - 1 كفهرس مع عامل الأقواس المربعة.
ورقة مرجعية
توفر متجهات C++ (vectors) طريقتين رئيسيتين للوصول إلى العناصر الفردية:
عامل الأقواس المربعة []:
std::vector<int> numbers = {10, 20, 30, 40};
int first = numbers[0]; // يحصل على 10
int third = numbers[2]; // يحصل على 30طريقة .at():
int first = numbers.at(0); // يحصل على 10
int third = numbers.at(2); // يحصل على 30الفرق الرئيسي هو الأمان: يمكن أن يتسبب [] في سلوك غير متوقع عند الوصول إلى فهارس غير صالحة، بينما يرمي .at() استثناءً (exception) للحماية من خلال التحقق من الحدود.
للوصول إلى العنصر الأخير، استخدم data.size() - 1 كفهرس.
جرّب بنفسك
#include <iostream>
#include <vector>
using namespace std;
int main() {
// قراءة المدخلات
int n;
cin >> n;
vector<int> data;
// قراءة n من الأعداد الصحيحة وإضافتها إلى المتجه (vector)
for (int i = 0; i < n; i++) {
int num;
cin >> num;
data.push_back(num);
}
int index1, index2;
cin >> index1;
cin >> index2;
// مهام: اكتب الكود الخاص بك أدناه
// الوصول إلى العناصر باستخدام عامل التشغيل [] وطريقة .at()
// تخزين القيم التي تم الوصول إليها في value1 و value2
// طباعة النتائج
cout << "Element at index " << index1 << ": " << value1 << endl;
cout << "Element at index " << index2 << ": " << value2 << endl;
cout << "First element: " << /* الوصول إلى العنصر الأول */ << endl;
cout << "Last element: " << /* الوصول إلى العنصر الأخير باستخدام data.size() - 1 */ << endl;
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector