Почему std :: set :: erase не принимает const_iterator?

Похоже, что согласно ISO 14882 2003 (он же Священный Стандарт C ++) std :: set :: erase принимает в качестве параметра итератор (не const_iterator )

из 23.3.3 [2]

void erase (позиция итератора);

Также следует отметить, что в моей реализации STL, поставляемой с VS2008, стирание занимает const_iterator , что привело к неприятному удивлению, когда я попытался скомпилировать свой код с другим компилятором. Теперь, поскольку моя версия использует const_iterator , то можно реализовать стирание с помощью const_iterator (как будто это не само собой разумеющееся).

Полагаю, ул. Комитет Andards имел в виду некоторую реализацию (или существующую реализацию), которая потребовала бы удаления итератора .

  • Если вы согласны с этим, не могли бы вы описать реализация set :: erase , которая потребовала бы изменить элемент, который собирался удалить (я не могу).
  • Если вы не согласны, пожалуйста, скажите мне почему они пришли к такому решению? Я имею в виду, что стирание элемента - это просто перестановка указателей!

РЕДАКТИРОВАТЬ

Это только что произошло мне кажется, что даже в случае итератора вы не можете изменить элемент в наборе. Но вопрос все еще остается - почему не const_iterator, особенно , если они в некотором смысле эквивалентны

5
задан Armen Tsirunyan 13 July 2011 в 19:58
поделиться