STL(standard template library)中的向量和表

C++的標準模板庫(STL)即是公共數據結構的實現。表ADT就是在STL中實現的數據結構之一。這些數據結構稱爲集合或容器。
表ADT的兩個實現:vector和list。vector給出表ADT的可增長的數組實現。優點是在常量時間內可索引,缺點是插入或刪除操作代價高。list提供表ADT的雙向鏈表實現。優點是,若變化位置已知,則插入和刪除代價很小,缺點是不好索引。
對所有STL容器都適用的三個方法:
這裏寫圖片描述

vector和list(此處指雙向鏈表)都支持在常量時間內訪問表的前端的項。
這裏寫圖片描述

僅對list有效的方法:
這裏寫圖片描述

vector特有的方法:前兩個可以高效索引,後兩個允許觀察和改變其內部容量。
這裏寫圖片描述

迭代器

在表的中部進行插入和刪除操作,需要位置標記。在STL中,通過內置類型iterator來給出位置。例如:
list<string> ,類型list<string>::iterator 給出位置;
vector<int> ,類型vectoy<int>::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來實現遍歷集合:
這裏寫圖片描述
這裏寫圖片描述

發佈了6 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章