هل هي آمنة لزيادة مكرر داخل عند استخدامه كحجة؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

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

وعلى أي حال أريد أن أكتب:

myIter = mySet.erase(myIter);

ولكن دول مجلس التعاون الخليجي لا ترغب في ذلك ... لذلك هل هو آمن لكتابة هذا بدلا من ذلك؟

mySet.erase(myIter++);

وتحرير: ونعم أنا من مقارنتها mySet.end ()؛

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

المحلول

وليس هناك مشكلة مع

mySet.erase(myIter++);

وترتيب العملية هو-واضحة المعالم: يتم نسخ myIter إلى myTempIter، يتم زيادة myIter، ومن ثم يعطى myTempIter لطريقة محو

<القوي> للجريج ومارك : في لا، لا توجد وسيلة مشغل ++ يمكن إجراء عمليات بعد الدعوة لمحو. بحكم التعريف، ومحو () ويسمى بعد المشغل ++ عاد.

نصائح أخرى

أولا، إعادة قراءة مستوى وسترى أن النموذج الأولي للطريقة مجموعة :: محو هو:

void erase(iterator position);

ومع ذلك، فإن حاويات النقابي في المحكمة الخاصة بلبنان هي "مستقرة"، ومحو عنصر لا تؤثر على التكرارات على عناصر أخرى. وهذا يعني أن السطر التالي غير صحيح:

iterator to_erase = myIter++;
mySet.erase(to_erase);
// Now myIter is still on the next element
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top