2010-12-03 6 views

ответ

40

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

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

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

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

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

+4

+1, документы SGI неплохие. Стандартным является только лучший источник информации - даже если его труднее читать. Вы можете купить свою электронную копию стандарта примерно за 30 долларов США, или вы можете загрузить ее из кодекса Google [здесь] (http://openassist.googlecode.com/files/C%2B%2B%20Standard%20-%20ANSI % 20ISO% 20IEC% 2014882% 202003.pdf) – 2010-12-03 09:20:32

8

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

27

От стандартного 23.1.2/8

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

Смежные вопросы