C++標準模板庫(STL)簡介

標準模板庫,是一組模板類和函數,向程序員提供了 :

  • 存儲信息的容器
  • 訪問存儲信息的迭代器
  • 操作容器內容的算法

簡單的來說,就是分爲三部分,算法,迭代器,容器,其中迭代器是算法和容器之間的橋樑,可以讓程序員可以通過算法對容器進行操作,而且這些算法也不是容器相關的,比如說reverse算法,對於多個容器都可以使用。本篇主要簡單的介紹一下標準模板庫(不包括C++11標準),如果想要系統的學習,還是需要去看相關書籍。

STL容器

容器是用於存儲數據的STL類,容器大概分爲2種:

  • 順序容器
  • 關聯容器

順序容器:指的是容器內的數據是按照順序存儲的。順序容器的插入速度較快,但是查找速度較慢。
順序容器有:vector,deque,list

關聯容器:指的是容器內的數據是按照鍵值對來存儲的,或者說是指定的順序來存儲的,就像字典一樣,關聯容器的特點是,插入速度慢,但是讀取速度快。
關聯容器有:set,map,multiset,multimap

有些STL實現也支持hash_set,hash_multiset,hash_map,hash_multimap。這些容器有更好的搜索性能,搜索所需要的時間和容器的大小無關。但是,這些容器並不是遵循標準的容器,如果想要應用程序在不同的平臺之間能夠移植,還是需要遵循標準的容器。

string雖然操作和容器十分相似,但是由於string不能存取任意的數據類型,所以嚴格來說,還不能被稱爲容器。

選擇正確的容器

容器 類型 優點 缺點
std::vector 順序容器 在末尾插入數據快
可以像訪問數組一樣訪問
調整大小時將影響性能
搜索時間與容器大小成正比
只能在末尾插入數據
std::deque 順序容器 具備vector的所有優點
還可以在頭部插入數據
插入時間也是固定的
有vector的所有缺點
但與vector不同的是,根據規範,deque不需要支持reverse()函數。
std::list 順序容器 在list中間,開頭,結尾插入數據,所需時間都是固定的
將元素從任意位置刪除,所需要的時間也是固定的
插入或者刪除元素後,指向其它元素的迭代器仍然有效
不能像數組那樣用下標進行訪問
搜索時間比vector要慢,因爲list並不是存儲在一塊連續的內存空間中
搜索時間和list容器中的元素個數成正比
std::set 關聯容器 搜索時間比順序容器快得多 插入時間比順序容器慢
std::multiset 關聯容器 優點與set類似
在需要存儲重複的元素時,可以使用multiset
缺點與set類似
std::map 關聯容器 用於存取鍵值對的容器,並根據鍵來排序(map無法根據值來排序)
搜索速度不和元素個數成正比
set::multimap 關聯容器 可以存儲鍵相同的元素
優點和map類似
缺點與map類似

Detail: map容器是存儲鍵值對的,只能按照鍵來排序,如果想要值來排序的話,有幾種解決方案,1,新建一個map容器,將原來map裏的鍵值對調換順序存儲到新的map容器中,當然,要保證逆序後的map鍵值都是唯一的,否則可以使用multimap。 2,新建一個set或者vector容器,把map裏的每個鍵值對保存到新的set和vector裏,然後自定義排序的函數對象進行排序。

STL迭代器

最簡單的迭代器是指針,給定一個指向數組第一個元素的指針,可以遞增該指針依次訪問數組元素,當然,也可以操作指針所指向的元素。

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