سؤال

لدي ناقل من myobjects في النطاق العالمي.

std::vector<myObject>

يتم تمرير طريقة مؤشر إلى أحد العناصر في المتجه. هل يمكن لهذه الطريقة زيادة المؤشر ، للوصول إلى العنصر التالي ،

myObject* pmObj;

++pmObj; // the next element ??

أو ينبغي تمريره std::Vector<myObject>::iterator وزيادة ذلك بدلا من ذلك؟

افترض الآن أن المتجه لن يتغير في هذه الأثناء.

هل كانت مفيدة؟

المحلول

نعم - الضمانات المعيارية في تصحيح تقني بأن التخزين لمتجه متجاورة ، لذلك ستعمل مؤشرات متزايدة في ناقل.

نصائح أخرى

نعم ، سيعمل هذا كما هو متوقع منذ ذلك الحين std::vector مُكشف لاستخدام سعة التخزين المتجاورة حسب المعيار. أود أن أقترح تمرير زوج من المتكررين إذا كنت تعمل مع مجموعة من الكائنات. هذا إلى حد كبير المصطلح القياسي كما تستخدمه STL. سيجعل هذا الكود أكثر أمانًا أيضًا نظرًا لأن لديك نقطة نهاية صريحة للتكرار بدلاً من الاعتماد على عدد أو شيء من هذا القبيل.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top