"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يجب عليك استخدام الأعداد الصحيحة الموقعة عند التكرار عبر std::vector باستخدام المؤشرات؟

لماذا يجب عليك استخدام الأعداد الصحيحة الموقعة عند التكرار عبر std::vector باستخدام المؤشرات؟

تم النشر بتاريخ 2024-11-24
تصفح:308

Why Should You Use Signed Integers When Iterating Over a std::vector Using Indices?

التكرار عبر std::vector: متغير الفهرس غير الموقع مقابل التوقيع

في لغة C، هناك طريقتان شائعتان للتكرار عبر ناقل: استخدام التكرارات أو استخدام المؤشرات. عند استخدام المؤشرات، من المهم مراعاة نوع متغير الفهرس.

استخدام التكرارات

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

for (auto it = v.begin(); it != v.end();   it) {
  // do something with *it
}

استخدام المؤشرات

عند التكرار على متجه باستخدام المؤشرات، من المهم استخدام متغير فهرس موقّع. وذلك لأن المتجهات تتم فهرستها من 0 إلى size() - 1، ويمكن للمتغير الموقّع أن يمثل هذا النطاق بشكل طبيعي أكثر. في المثال التالي، يتم استخدام int الموقّع لفهرسة المتجه:

for (int i = 0; i 

لماذا يمكن أن يكون استخدام متغير فهرس غير موقّع خطيرًا

قد يكون استخدام متغير فهرس غير موقّع خطيرًا لأنه قد يؤدي إلى سلوك غير محدد إذا تجاوز الفهرس حجم المتجه. وذلك لأن المتغير غير الموقع يلتف عندما يصل إلى قيمته القصوى، وهذا يمكن أن يتسبب في أن يكون الفهرس سالبًا، وهو ليس فهرسًا صالحًا للمتجه.

في المثال التالي، int غير الموقع هو يُستخدم لفهرسة المتجه، وإذا كان حجم المتجه أكبر من الحد الأقصى لقيمة int غير الموقعة، فسوف يلتف الفهرس ويصبح سالبًا، مما يؤدي إلى سلوك غير محدد:

for (unsigned int i = 0; i 

الاستنتاج

عند التكرار على متجه، فمن الأفضل دائمًا استخدام متغير فهرس موقّع. وذلك لأنه يضمن أن الفهرس سيكون دائمًا ضمن النطاق الصالح للمتجه، ويتجنب احتمال حدوث سلوك غير محدد.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3