STL的簡介及相關內容

一、STL的簡要概述

STL(standard template library)中文可譯爲標準模板庫或者泛型庫,其包含有大量的模板類和模板函數,是 C++ 提供的一個基礎模板的集合,用來完成輸入/輸出、數學計算等功能。

STL 是一些容器、算法和其他一些組件的集合,所有容器和算法都是總結了幾十年來算法和數據結構的研究成果,彙集了許多計算機專家學者經驗的基礎上實現的,因此可以說,STL 基本上達到了各種存儲方法和相關算法的高度優化。

二、STL的組成結構

STL的組成 含義
容器 一些封裝數據結構的模板類,例如 vector 向量容器、list 列表容器等。
算法 STL 提供了非常多(大約 100 個)的數據結構算法,它們都被設計成一個個的模板函數,這些算法在 std 命名空間中定義,其中大部分算法都包含在頭文件 中,少部分位於頭文件 中。
迭代器 在 C++ STL 中,對容器中數據的讀和寫,是通過迭代器完成的,扮演着容器和算法之間的膠合劑。
函數對象 如果一個類將 () 運算符重載爲成員函數,這個類就稱爲函數對象類,這個類的對象就是函數對象(又稱仿函數)。
適配器 可以使一個類的接口(模板的參數)適配成用戶指定的形式,從而讓原本不能在一起工作的兩個類工作在一起。容器、迭代器和函數都有適配器。
內存分配器 爲容器類模板提供自定義的內存申請和釋放功能

三、STL中的容器

容器類型

容器種類 功能
序列容器 主要包括 vector 向量容器、list 列表容器和deque 雙端隊列容器。序列容器:
元素在容器中的位置同元素的值無關,即容器不是排序的。將元素插入容器時,指定在什麼位置,元素就會位於什麼位置。
排序容器 包括 set 集合容器、multiset多重集合容器、map映射容器以及 multimap 多重映射容器。排序容器中的元素默認是由小到大排序好的,即便是插入元素,元素也會插入到適當位置。所以關聯容器在查找時具有非常好的性能。
哈希容器 C++ 11 新加入 4 種關聯式容器,分別是 unordered_set 哈希集合、unordered_multiset 哈希多重集合、unordered_map 哈希映射以及 unordered_multimap 哈希多重映射。和排序容器不同,哈希容器中的元素是未排序的,元素的位置由哈希函數確定。

四、STL的迭代器

迭代器和 C++ 的指針非常類似,它可以是需要的任意類型,通過迭代器可以指向容器中的某個元素,如果需要,還可以對該元素進行讀/寫操作。、

用的迭代器按功能強弱分爲:輸入迭代器、輸出迭代器、前向迭代器、雙向迭代器、隨機訪問迭代器 5 種。

輸入迭代器和輸出迭代器,它們不是把數組或容器當做操作對象,而是把輸入流/輸出流作爲操作對象。

迭代器類別 說明
前向迭代器 只能一次一個元素向前移動,並保留在容器中的位置
雙向迭代器 組合正向迭代器和逆向迭代器的功能,支持多遍算法
隨機訪問迭代器 組合雙向迭代器的功能與直接訪問容器中任何元素的功能,即可向前向後跳過任意個元素
  1. 前向迭代器(forward iterator)

假設 p 是一個前向迭代器,則 p 支持 ++p,p++,*p 操作,還可以被複制或賦值,可以用 == 和 != 運算符進行比較。此外,兩個正向迭代器可以互相賦值。

  1. 雙向迭代器(bidirectional iterator)

雙向迭代器具有正向迭代器的全部功能,除此之外,假設 p 是一個雙向迭代器,則還可以進行 --p 或者 p-- 操作(即一次向後移動一個位置)。

  1. 隨機訪問迭代器(random access iterator)

隨機訪問迭代器具有雙向迭代器的全部功能。除此之外,假設 p 是一個隨機訪問迭代器,i 是一個整型變量或常量,則 p 還支持以下操作:

p+=i:使得 p 往後移動 i 個元素。

p-=i:使得 p 往前移動 i 個元素。

p+i:返回 p 後面第 i 個元素的迭代器。

p-i:返回 p 前面第 i 個元素的迭代器。

p[i]:返回 p 後面第 i 個元素的引用。

容器對應的迭代器類型:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章