C++的標準模板庫(STL)即是公共數據結構的實現。表ADT就是在STL中實現的數據結構之一。這些數據結構稱爲集合或容器。
表ADT的兩個實現:vector和list。vector給出表ADT的可增長的數組實現。優點是在常量時間內可索引,缺點是插入或刪除操作代價高。list提供表ADT的雙向鏈表實現。優點是,若變化位置已知,則插入和刪除代價很小,缺點是不好索引。
對所有STL容器都適用的三個方法:
vector和list(此處指雙向鏈表)都支持在常量時間內訪問表的前端的項。
僅對list有效的方法:
vector特有的方法:前兩個可以高效索引,後兩個允許觀察和改變其內部容量。
迭代器
在表的中部進行插入和刪除操作,需要位置標記。在STL中,通過內置類型iterator來給出位置。例如:
對
對
以此類推。
關於迭代器的三個問題:
1.獲得迭代器
2.迭代器的方法
迭代器最常見的操作
3.哪些表ADT需要迭代器作爲形參(需要迭代器的容器操作)
使用迭代器間隔地刪除表中的項
函數模板,可以用於list和vector
const_iterator
STL中,每一個集合不僅包含嵌套的iterator類型,也包含嵌套的const_iterator類型。iterator和const_iterator類型。iterator和const_iterator之間的主要區別是:const_iterator的operator*返回常量引用,這樣const_iterator的*itr就不能出現在賦值語句的左邊。
編譯器會要求必須使用const_iterator類遍歷常量集合。有兩個版本的begin和兩個版本的end來實現遍歷集合: