來自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