Похоже, что согласно ISO 14882 2003 (он же Священный Стандарт C ++) std :: set
принимает в качестве параметра итератор
(не const_iterator
)
из 23.3.3 [2]
void erase (позиция итератора);
Также следует отметить, что в моей реализации STL, поставляемой с VS2008, стирание занимает const_iterator
, что привело к неприятному удивлению, когда я попытался скомпилировать свой код с другим компилятором. Теперь, поскольку моя версия использует const_iterator
, то можно реализовать стирание с помощью const_iterator
(как будто это не само собой разумеющееся).
Полагаю, ул. Комитет Andards имел в виду некоторую реализацию (или существующую реализацию), которая потребовала бы удаления итератора
.
set :: erase
, которая потребовала бы изменить элемент, который собирался удалить (я не могу). РЕДАКТИРОВАТЬ
Это только что произошло мне кажется, что даже в случае итератора вы не можете изменить элемент в наборе. Но вопрос все еще остается - почему не const_iterator, особенно , если они в некотором смысле эквивалентны