看来,根据 ISO 14882 2003(又名 C++ 的神圣标准)std::set<K, C, A>::erase
将iterator
其作为参数(不是 a const_iterator
)
从 23.3.3 [2]
void erase(iterator position);
还可能值得注意的是,在我的 VS2008 附带的 STL 实现中,const_iterator
当我尝试使用另一个编译器编译我的代码时,erase 会导致令人不快的惊喜。现在,由于我的版本采用 a const_iterator
,因此可以使用 a 来实现擦除const_iterator
(好像它不是不言而喻的)。
我想标准委员会已经考虑了一些实现(或手头现有的实现),这需要擦除来获取iterator
.
- 如果您同意这种情况,您能否描述一个
set::erase
需要修改将要删除的元素的实现(我不能)。 - 如果你不同意,请告诉我为什么他们会做出这个决定?我的意思是,擦除一个元素只是指针的一些重新排列!
编辑
我突然想到,即使在迭代器的情况下,您也无法修改集合中的元素。但问题仍然存在——为什么不使用 const_iterator,尤其是如果它们在某种意义上是等价的