بالنسبة إلى std::map، كيف سيتصرف الإدراج إذا كان عليه تغيير حجم الحاوية وكانت الذاكرة غير متوفرة؟

StackOverflow https://stackoverflow.com/questions/104483

  •  01-07-2019
  •  | 
  •  

سؤال

بالنسبة إلى std::map، كيف سيتصرف الإدراج إذا كان عليه تغيير حجم الحاوية وكانت الذاكرة غير متوفرة؟

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

المحلول

لا تحتاج خريطة STL إلى "تغيير حجم" الحاوية.الخريطة (تمامًا مثل القائمة) عبارة عن حاوية تعتمد على العقدة؛كل إدراج يخصص الذاكرة.

ومع ذلك، يتم التعامل مع حالة نفاد الذاكرة تمامًا مثل أي حالة نفاد ذاكرة أخرى في لغة C++:فإنه يلقي std::bad_alloc.حاويات STL ذات المخصصات الافتراضية لا تفعل أي شيء خيالي، فكلها تنتهي بالتخصيص عبر عوامل التشغيل الجديدة/الحذف القياسية بطريقة ما.

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

نصائح أخرى

الجديد سوف يلقي استثناء.بهذه السهولة.

لن يحدث الإدراج، ولن يتم تعديل محتوى القاموس أو إتلافه.

للتوسع في إجابة نيلز (نعم سوف يرمي)، ولكن ما يحدث عندما يرمي يكون مربكًا في بعض الأحيان في المواصفات.

في 17.2.2 من المواصفات (فيما يتعلق بالخرائط/الاستثناءات)، إذا تم طرح Insert()، فلن يكون لهذه الوظيفة أي تأثير.وهذا ضمان قوي للخريطة.وهذا يختلف عن الحاويات التي تستخدم التخصيص المتجاور مثل المتجه أو deque.

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