سؤال

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

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

المحلول

يرى http://www.sgi.com/tech/stl/Map.html

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

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

نصائح أخرى

erase يعود iterator في سي++ 11.هذا يرجع إلى تقرير الخلل 130:

يوضح الجدول 67 (23.1.1) أن الحاوية::erase(iterator) تُرجع مُكرِّرًا.يوضح الجدول 69 (23.1.2) أنه بالإضافة إلى هذا المطلب، تقول الحاويات الترابطية أيضًا أن الحاوية::erase(iterator) تُرجع فارغة.هذه ليست إضافة.إنه تغيير في المتطلبات، مما يؤدي إلى فشل الحاويات الترابطية في تلبية متطلبات الحاويات.

قبلت لجنة المعايير هذا:

يوافق LWG على أن نوع الإرجاع يجب أن يكون مكررًا، وليس باطلاً.(يوافقه أليكس ستيبانوف أيضًا).

(LWG = مجموعة عمل المكتبة).

التناقض يرجع إلى الاستخدام. vector هو تسلسل له ترتيب على العناصر.في حين أنه صحيح أن العناصر الموجودة في أ map يتم ترتيبها أيضًا وفقًا لبعض معايير المقارنة، وهذا الترتيب غير واضح من الهيكل.لا توجد طريقة فعالة للانتقال من عنصر إلى آخر (فعال = وقت ثابت).في الواقع، يعد التكرار على الخريطة أمرًا مكلفًا للغاية؛إما إنشاء المكرر أو المكرر نفسه يتضمن المشي فوق الشجرة الكاملة.لا يمكن القيام بذلك في يا(ن)، ما لم يتم استخدام المكدس، وفي هذه الحالة لم تعد المساحة المطلوبة ثابتة.

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

بالإضافة إلى ذلك، روب على حق.ليست هناك حاجة لأن تقوم الخريطة بإرجاع مُكرِّر.

بالإضافة إلى ذلك، توفر STL المرفقة مع MS Visual Studio C++ (Dinkumware IIRC) تطبيقًا للخريطة مع erase دالة تعيد المكرر إلى العنصر التالي.

لقد لاحظوا أنها ليست مطابقة للمعايير.

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

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