STL各個容器的總結

STL(Standard Template Library,標準模板庫)是惠普實驗室開發的一系列軟件的統稱。現然主要出現在C++中,但在被引入C++之前該技術就已經存在了很長的一段時間。

STL的從廣義上講分為三類:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通過迭代器可以進行無縫地連接。幾乎所有的代碼都採 用了模板類和模板函數的方式,這相比於傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。在C++標準中,STL被組織為下面的13個頭文 件:

STL各個容器的總結

STL詳細的說六大組件

  • – 容器(Container)
  • – 算法(Algorithm)
  • – 迭代器(Iterator)
  • – 仿函數(Function object)
  • – 適配器(Adaptor)
  • – 空間配製器(allocator)

使用STL的好處

1)STL是C++的一部分,因此不用額外安裝什麼,它被內建在你的編譯器之內。

2)STL的一個重要特點是數據結構和算法的分離。儘管這是個簡單的概念,但是這種分離確實使得STL變得非常通用。例如,在STL的vector容器中,可以放入元素、基礎數據類型變量、元素的地址;STL的sort()函數可以用來操作vector,list等容器。

3) 程序員可以不用思考STL具體的實現過程,只要能夠熟練使用STL就OK了。這樣他們就可以把精力放在程序開發的別的方面。

4) STL具有高可重用性,高性能,高移植性,跨平臺的優點。

高可重用性:STL中幾乎所有的代碼都採用了模板類和模版函數的方式實現,這相比於傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。關於模板的知識,已經給大家介紹了。

高性能:如map可以高效地從十萬條記錄裡面查找出指定的記錄,因為map是採用紅黑樹的變體實現的。(紅黑樹是平橫二叉樹的一種)

高移植性:如在項目A上用STL編寫的模塊,可以直接移植到項目B上。

跨平臺:如用windows的Visual Studio編寫的代碼可以在Mac OS的XCode上直接編譯。

5) 程序員可以不用思考STL具體的實現過程,只要能夠熟練使用STL就OK了。這樣他們就可以把精力放在程序開發的別的方面。

6) 瞭解到STL的這些好處,我們知道STL無疑是最值得C++程序員驕傲的一部分。每一個C++程序員都應該好好學習STL。只有能夠熟練使用STL的程序員,才是好的C++程序員。

7) 總之:招聘工作中,經常遇到C++程序員對STL不是非常瞭解。大多是有一個大致的映像,而對於在什麼情況下應該使用哪個容器和算法都感到比較茫然。

STL是C++程序員的一項不可或缺的基本技能,掌握它對提升C++編程大有裨益。

在實際的開發過程中,數據結構本身的重要性不會遜於操作於數據結構的算法的重要性,當程序中存在著對時間要求很高的部分時,數據結構的選擇就顯得更加重要。

經典的數據結構數量有限,但是我們常常重複著一些為了實現向量、鏈表等結構而編寫的代碼,這些代碼都十分相似,只是為了適應不同數據的變化而在 細節上有所出入。STL容器就為我們提供了這樣的方便,它允許我們重複利用已有的實現構造自己的特定類型下的數據結構,通過設置一些模板,STL容器對最常用的數據結構提供了支持,這些模板的參數允許我們指定容器中元素的數據類型,可以將我們許多重複而乏味的工作簡化。

容器部分主要由頭文 件,,,,,組成。

下圖中將常用的數據結構彙總列出:

STL各個容器的總結

喜歡我的文章的話,就關注我吧!在本頭條號的置頂文章中有【文章分類】包含:

[C++進階篇系列]

[高級網絡編程篇系列]

[Linux系統篇系列]

[C++基礎知識篇]

[協議篇系列]

[數據結構和算法系列]

[設計模式系列]

不要只收藏和轉發哦,軟件架構師成長必經之路。


分享到:


相關文章: