📖作者介紹:22級樹莓人(計算機專業),熱愛編程<目前在c++階段>——目標Windows,MySQL,Qt,數據結構與算法,Linux,多線程,會持續分享學習成果和小項目的
📖作者主頁:熱愛編程的小K
📖專欄鏈接:c++
🎉歡迎各位→點贊👏 + 收藏💞 + 留言🔔?
💬總結:希望你看完之后,能對你有所幫助,不足請指正!共同學習交流 🐾
STL,英文全稱 standard template library,中文可譯為標準模板庫或者泛型庫,其包含有大量的模板類和模板函數,是 C++ 提供的一個基礎模板的集合,用于完成諸如輸入/輸出、數學計算等功能。
STL 最初由惠普實驗室開發,于 1998 年被定為國際標準,正式成為 C++ 程序庫的重要組成部分。
STL的從廣義上講分為三類:algorithm(算法)、container(容器)和iteraotr(迭代器),容器和算法通過迭代器可以進行無縫地連接。幾乎所有的代碼都采 用了模板類和模板函數的方式,這相比于傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。
STL細說六大件:
? – 容器(Container)
? – 算法(Algorithm)
? – 迭代器(iterator)
? – 仿函數(Function object)
? – 適配器(Adaptor)
? – 空間配制器(allocator)
在C++標準中,STL被組織為下面的13個頭文 件:<algorithm>、<deque>、<functional>、<iter>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack> 和<utility>。
1)STL是C++的一部分,因此不用額外安裝什么,它被內建在你的編譯器之內。
2)STL的一個重要特點是數據結構和算法的分離。盡管這是個簡單的概念,但是這種分離確實使得STL變得非常通用。
3) 程序員可以不用思考STL具體的實現過程,只要能夠熟練使用STL就OK了。這樣他們就可以把精力放在程序開發的別的方面。
4) STL具有高可重用性,高性能,高移植性,跨平臺的優點。
高可重用性:STL中幾乎所有的代碼都采用了模板類和模版函數的方式實現,這相比于傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。關于模板的知識,已經給大家介紹了。
高性能:如map可以高效地從十萬條記錄里面查找出指定的記錄,因為map是采用紅黑樹的變體實現的。(紅黑樹是平橫二叉樹的一種)
高移植性:如在項目A上用STL編寫的模塊,可以直接移植到項目B上。
跨平臺:如用windows的Visual Studio編寫的代碼可以在Mac OS的XCode上直接編譯。
5) 了解到STL的這些好處,我們知道STL無疑是最值得C++程序員驕傲的一部分。每一個C++程序員都應該好好學習STL。只有能夠熟練使用STL的程序員,才是好的C++程序員。
6)總之:招聘工作中,經常遇到C++程序員對STL不是非常了解。大多是有一個大致的映像,而對于在什么情況下應該使用哪個容器和算法都感到比較茫然。STL是C++程序員的一項不可或缺的基本技能,掌握它對提升C++編程大有裨益。
Alexander Stepanov容器,置物之所也。
研究數據的特定排列方式,以利于搜索或排序或其他特殊目的,這一門學科我們稱為數據結構。幾乎可以說,任何特定的數據結構都是為了實現某種特定的算法。STL容器就是將運用最廣泛的一些數據結構實現出來。
常用的數據結構:數組(array),鏈表(list),樹(tree),棧(stack),隊列(queue),集合(set),映射表(map),根據數據在容器中的排列特性,這些數據分為序列式容器和關聯式容器兩種。
序列式容器:即以線性排列(類似普通數組的存儲方式)來存儲某一指定類型(例如 int、double 等)的數據,需要特殊說明的是,該類容器并不會自動對存儲的元素按照值的大小進行排序。。
關聯式容器:非線性排列(二叉樹),在存儲元素時會為每個元素在配備一個鍵,整體以鍵值對的方式存儲到容器中,可以通過鍵值直接找到對應的元素,而無需遍歷整個容器。另外,關聯式容器在存儲元素,默認會根據各元素鍵值的大小做升序排序。
算法,問題之解法也。
以有限的步驟,解決邏輯或數學上的問題,這一門學科我們叫做算法(Algorithms).
廣義而言,我們所編寫的每個程序都是一個算法,其中的每個函數也都是一個算法,畢竟它們都是用來解決或大或小的邏輯問題或數學問題。STL收錄的算法經過了數學上的效能分析與證明,是極具復用價值的,包括常用的排序,查找等等。特定的算法往往搭配特定的數據結構,算法與數據結構相輔相成。
算法分為:質變算法和非質變算法。
質變算法:是指運算過程中會更改區間內的元素的內容。例如拷貝,替換,刪除等等
非質變算法:是指運算過程中不會更改區間內的元素內容,例如查找、計數、遍歷、尋找極值等等
迭代器(iterator)是一種抽象的設計概念,現實程序語言中并沒有直接對應于這個概念的實物。
iterator模式定義如下:提供一種方法,使之能夠依序尋訪某個容器所含的各個元素,而又無需暴露該容器的內部表示方式。(實際上是封裝了指針的類中類)
迭代器的設計思維-STL的關鍵所在,STL的中心思想在于將容器(container)和算法(algorithms)分開,彼此獨立設計,最后再一貼膠著劑將他們撮合在一起。從技術角度來看,容器和算法的泛型化并不困難,c++的class template和function template可分別達到目標,如果設計出兩這個之間的良好的膠著劑,才是大難題。
迭代器的種類:
輸入迭代器 | 提供對數據的只讀訪問 | 只讀,支持++、==、!= |
輸出迭代器 | 提供對數據的讀寫訪問 | 讀寫,支持++ |
前向迭代器 | 提供讀寫操作,并能向前推進迭代器 | 讀寫,支持++、==、!= |
雙向迭代器 | 提供讀寫操作,并能向前和向后操作 | 讀寫,支持++、–, |
隨機訪問迭代器 | 提供讀寫操作,并能以跳躍的方式訪問容器的任意數據,是功能最強的迭代器 | 讀寫,支持++、–、[n]、-n、<、<=、>、>= |
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
怎樣將ansys中文版換成英文版?在設置中找到語言設置,切換到英語確認即可。ansys19.2怎么漢化?因為沒有中文版,所以無法調整中文版。ansys18.1英文版怎么改中文?下載后再連接中文版就行了。沒有我附加的操作。ansys為什么不出中文版?有中文版,但是你可以 不要用經典的ansys,應該用ansys workbench。界面非常友好,3d界面非常豐富,項目界面可以輕松處理多場耦合。ans...
在windows安裝器里,使用bootsect.exe更新引導是什么意思,有什么作用,有必要開啟嗎?如有必要,此更新引導指將新安裝的系統添加到引導菜單。如果您不選擇它,您將無法選擇啟動新安裝的系統...
如何保留Photoshop cs4中的參考線?沒有這個功能,但是我們可以想別的辦法達到目的,就是做一個模板。創建一個透明背景的新圖像,做一個好的參考線。保存為PSD(或PNG)格式以備后用。以后需要參考線的時候,把它拉到要處理的圖像里就行了。添加:打開準備好的帶有參考線圖像的模板,然后打開背景圖像,按住左鍵,將背景圖像拉到模板上松開左鍵。不過需要注意的是,圖片和模板的分辨率和大小是一樣的??梢蕴崆?..