madf: (Default)
[personal profile] madf
Не варто покладатись на магію слів "Multimap has the important property that inserting a new element into a multimap does not invalidate iterators that point to existing elements. Erasing an element from a multimap also does not invalidate any iterators, except, of course, for iterators that actually point to the element that is being erased." із документації SGI на std::multimap. Точніше покладатись можна, тільки читати треба уважно. Уявімо що у нас є контейнер типу std::multimap<KeyType, ValueType>. Якимось чином (наприклад, за допомогою equal_range) ми отримуємо діапазон ітераторів і "проходимо" по цьому діапазону. Все в порядку навіть якщо ми робимо erase(position++) (зверніть увагу на пост-інкремент). Можна навіть зробити кілька insert під час ітерації - діапазон залишиться валідним.
Я близько 2 годин намагався придумати ситуацію у якій цей діапазон перестане бути валідним під час ітерації, і таки придумав. Достатньо видалити праву межу діапазону і ітерація ніколи не завершиться. Такі справи...
А на закуску - слайди по темі: Invalidation of STL iterators (PDF).
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

madf: (Default)
madf

April 2018

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 7th, 2026 10:25 am
Powered by Dreamwidth Studios