STl總體概念

2021-06-21 14:12:50 字數 2188 閱讀 8381

1.slt的目的是把資料和操作分離:資料用容器進行管理,操作用演算法實現,最後迭代器作為粘合劑把二者無縫連線。這個和物件導向有點背道而馳。

2.容器分為:序列式容器和關聯式容器,序列式有(vector,deque,list),我們也可以把strings和array當做一種序列式容器只是非標準,關聯式容器有(set,multisets,map,multimap)。

3.push_back(element),siz(),[i]下標法獲取或設定值。deque提供push_front(element)方法。list使用的是鍊錶的方式存放資料,因此不能用下標的方式獲取元素,而其他2個序列容器可以通過下標獲取元素。但是優點是可以在任何地方插入或者刪除元素節點,只是查詢的時候表其他2個容器的速度慢。list新增了empty()方法判斷空,除了提供push_back()新增方法還提供了front()獲取前面資料,back()獲取後面的元素,pop_fron()和pop_back()從前面和後面刪除元素。

4.關聯容器在記憶體中結構以二叉樹排列,左子樹不大於自己,右子樹不小於自己。特殊容器stacks棧(後進先出),queues佇列(先進先出),priority queue根據使用者函式定義的優先級別獲取下乙個元素。

5.容器中常用方法 begin() 和end()。每種容器都提供了2種迭代器,乙個是可以「讀/寫」模式的迭代器,另外一種是"唯讀"模式的迭代器,例如:vector::iterator和vector::const_iterator,在程式設計時最好在迭代時用前置增量++a,而不是後置增量a++,因為後置增量會建立乙個臨時物件儲存原本位置。

6.在定義完關聯容器的時候用insert新增元素時,元素的排序預設是按照》開始的,如果想定義自己的排序規則,則可以自己定義乙個偽函式,通過他進行排序。例如:set> coll;其中greater是已經定義好的模板排序函式。對於multimap 在增加(insert)時要用make_pair,對於map我們可以用coll["鍵"]="值"的形式新增。

7.迭代器的種類分為:雙向迭代器(主要用於list,set,multiset,map,multimap,可以遞增++或者遞減--)和隨機訪問迭代器(主要用於vector,deque,string。除了遞增和遞減還具有迭代器自身算術運算,比如iter+5,表示移動5個元素,雙向迭代器沒有此功能)。

8.演算法:引入標頭檔案,常用演算法min_element(),max_element(),sort()還提供了自定義排序,find(),reverse()以上函式至少要傳入2個引數表示函式執行的區間,stl一般採用的半開區間。find()函式當發現不了元素時返回指標將會指向end(),半開區間不會包含最後乙個元素,這個說明如果要對最後乙個元素操作,我們應該對最後乙個元素實行++前置操作。以上函式我們傳遞的區間必須是第二個指標必須在第乙個指標之後,如果不是則系統會出現問題。根據情況有2種出來方式:針對隨機迭代訪器常用的做法是把區間的2個迭代器進行比較如:if(iter19.多區間操作只需提供第乙個區間的起始位置,後面的區間根據第乙個判斷。注意:必須保證第二個或者後面的區間必須至少和第乙個區間的個數相等。例如:if(equal(coll1.begin(),coll1.end(),coll2.begin())),copy(coll1.begin(),coll1.end(),coll2.begin());上述問題出現了2個解決方案,要麼給出正確的區間,要麼顯示的改變區間大小(coll1.resize()重置大小或者dequecoll2(coll1.size())初始化設定大小,會加入預設的值在新增區間中,我們也可以傳遞額外的引數給建構函式和resize()函式,把新增的區間預設值按照你的想法走),這2個辦法只適合於序列化容器(vector,deque,list),因為關聯式容器根本就不會出現此種情況。

10.迭代器之配接器:insert iterators(插入迭代器)stream iterators(流迭代器)reverse iterators(逆向迭代器)。

11.insert iterators以插入的方式非覆蓋的方式,可以解決目標空間不足,它會增大目標空間。3種插入迭代器back_inserter()元素插入到後面,其實內部使用了push_back(),因此只有提供了該方法的容器才有此功能(vector,list,deque).front_inserter()使元素新增到最前端,內部使用了push_front()使用範圍(deque,list);inserter()唯一乙個預先定義好的能用於關聯式容器的迭代器,內部呼叫insert()函式,不過對關聯式容器安插的順序只是乙個輔助,真正安插在哪兒取決於元素本身,因此有可能給的位置會比預設的效率還低【關聯式容器插入後的排序是按照元素本身的,與插入的順序無關】;

STL總體說明

初探c stl 學習筆記 1 總體說明 本學習筆記主要講解c stl 的基本知識與體系框架,主要適合初學者,對於理解 stlstl。講解主線 1 講解 stl中的通用工具,比如 pair 對組,auto ptr 智慧型指標。2 講解 stl中的標準容器,vector list duque set m...

總體引數的估計(概念)

舉例 到底北京人同意北京大力發展軌道交通,由於不大可能詢問所有的一千多萬北京市民,人們只好進行抽樣調查以得到樣本,並用樣本中同意發展軌道交通的比例來估計真實的比例,從不同的樣本得到的結論也不會完全一樣。雖然真實的比例在這種抽樣過程中永遠不可能知道,但有可能知道估計出來的比例和真實的比例大致差多,從資...

UML學習 總體概念篇

前言 我們在實施乙個專案時,前期的設計是非常重要的,如建築師在建造乙個建築時,需要事先設計圖紙,設計圖紙是設計的語言,是不同的工程設計人員 設計人員和生產人員之間進行溝通的語言,在乙個現代化的工程裡面,人們需要相互溝通和協調合作,就必須使用標準的工業化設計語言,而在計算機專案設計中,uml作優秀的標...