来自Scott Mayers的“Effective STL”的项目26被标记为“优选iterator
到const_iterator
,reverse_iterator
和const reverse iterator
”。常量迭代器在C++中仍然是邪恶的14
推理原因是insert()
和erase()
的某些形式需要使用iterator
,而从其他类型转换是繁琐且容易出错的。此外,根据STL的实现,比较iterator
和const_iterator
可能会有问题。
该书于2001年发布。第26条中的建议是否仍然适用于当前的gcc状态?
当然'insert'和'erase'需要一个非const的'iterator':他们改变数据,所以'const'数据将是一个坏主意。 – gexicide 2014-09-11 09:12:49
@gexicide:错了。如果你可以调用'erase',无论如何你都可以访问容器。出于这个原因,C++ 11改变了'erase'和'insert'函数来取'const_iterator's('iterator's总是可以转换为它们的'const_'变体)。 – Xeo 2014-09-11 09:14:05
@Xeo:对,我的错。感谢您清理它。 – gexicide 2014-09-11 09:15:06