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).

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 08:23 am
Powered by Dreamwidth Studios