斯科特·梅耶斯(Scott Mayers)的“有效STL”中的第26项标记为“首选iterator
而不是const_iterator
,reverse_iterator
和const reverse iterator
”。
原因是,某些形式的insert()
和erase()
需要完全iterator
,而从其他类型进行转换既繁琐又容易出错。此外,根据STL的实现,比较iterator
和const_iterator
可能会出现问题。
该书于2001年发行。在gcc的当前状态下,第26项中的建议是否仍然有效?
最佳答案
C++ 14标准(N3936)保证iterator
和const_iterator
可以自由比较(§23.2.1[container.requirements.general]/p7):
此外,容器成员函数从C++ 11(第C.2.13节[diff.cpp03.containers])开始采用const_iterator
参数-可以从标记中推断出,这是对C++ 03的更改):
容器要求已类似地更改为采用构造器。另外,很容易通过std::reverse_iterator
成员函数从.base()
获取基础迭代器。因此,问题中提到的所有关注点都不应该是合格编译器中的问题。