Подтвердить что ты не робот

Включение ли в карту STL недействительности другого существующего итератора?

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

Вставка в std:: map не отменяет существующих итераторов.