斯科特·梅耶斯(Scott Mayers)的“有效STL”中的第26项标记为“首选iterator而不是const_iteratorreverse_iteratorconst reverse iterator”。

原因是,某些形式的insert()erase()需要完全iterator,而从其他类型进行转换既繁琐又容易出错。此外,根据STL的实现,比较iteratorconst_iterator可能会出现问题。

该书于2001年发行。在gcc的当前状态下,第26项中的建议是否仍然有效?

最佳答案

C++ 14标准(N3936)保证iteratorconst_iterator可以自由比较(§23.2.1[container.requirements.general]/p7):



此外,容器成员函数从C++ 11(第C.2.13节[diff.cpp03.containers])开始采用const_iterator参数-可以从标记中推断出,这是对C++ 03的更改):



容器要求已类似地更改为采用构造器。另外,很容易通过std::reverse_iterator成员函数从.base()获取基础迭代器。因此,问题中提到的所有关注点都不应该是合格编译器中的问题。

09-28 14:57