Делает ли вставка в карту STL недействительным другой существующий итератор? - PullRequest
34 голосов
/ 03 декабря 2010

Я использовал std :: map в STL. Могу ли я использовать итератор после вставки какого-либо другого элемента на карту? Это все еще действует?

Ответы [ 3 ]

46 голосов
/ 03 декабря 2010

Если вы сомневаетесь в семантике операции над контейнером, обратитесь к документации :

Карта имеет важное свойство, заключающееся в вставке нового элемента в * 1006.* не делает недействительными итераторы, которые указывают на существующие элементы.

Стирание элемента из map также не делает недействительными никакие итераторы, за исключением, конечно, итераторов, которые фактически указывают на удаляемый элемент.

Этовзяты из документации SGI STL.Хотя эта документация технически не определяет поведение контейнеров стандартной библиотеки C ++, различия, как правило, незначительны, за исключением частей STL, которые, конечно, не являются частью стандартной библиотеки C ++.

Документация SGI STL является незаменимым справочником, особенно если у вас нет копии стандарта C ++.

29 голосов
/ 03 декабря 2010

Из стандарта 23.1.2 / 8

Элементы вставки не должны влиять на действительность итераторов и ссылок на контейнер, а элементы стирания должны делать недействительными только итераторы и ссылки на стертые элементы.

8 голосов
/ 03 декабря 2010

Вставка в std :: map не делает недействительными существующие итераторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...