2010 8 4 續上篇,STL簡介

2022-05-21 02:35:59 字數 3494 閱讀 4186

引用:

stl中六大元件:

1)容器(container),是一種資料結構,如list,vector,和deques ,以模板類的方法提供。為了訪問容器中的資料,可以使用由容器類輸出的迭代器;

2)迭代器(iterator),提供了訪問容器中物件的方法。例如,可以使用一對迭代器指定list或vector中的一定範圍的物件。迭代器就如同乙個指標。事實上,c++的指標也是一種迭代器。但是,迭代器也可以是那些定義了operator*()以及其他類似於指標的操作符地方法的類物件;

3)演算法(algorithm),是用來操作容器中的資料的模板函式。例如,stl用sort()來對乙個vector中的資料進行排序,用find()來搜尋乙個list中的物件,函式本身與他們操作的資料的結構和型別無關,因此他們可以在從簡單陣列到高度複雜容器的任何資料結構上使用;

4)仿函式(function object)

5)迭代介面卡(adaptor)

6)空間配製器(allocator)

7)string  也算是stl的一部分

(1)序列式容器(sequence containers),每個元素都有固定位置--取決於插入時機和地點,和元素值無關,vector、deque、list;

vectors:將元素置於乙個動態陣列中加以管理,可以隨機訪問元素(用索引直接訪問),陣列尾部新增或移除元素非常快速。但是在中部或頭部安插元素比較費時;

deques:是「double-ended queue」的縮寫,可以隨機訪問元素(用索引直接訪問),陣列頭部和尾部新增或移除元素都非常快速。但是在中部或頭部安插元素比較費時;

lists:雙向鍊錶,不提供隨機訪問(按順序走到需訪問的元素,o(n)),在任何位置上執行插入或刪除動作都非常迅速,內部只需調整一下指標;

(2)關聯式容器(associated containers),元素位置取決於特定的排序準則,和插入順序無關,set、multiset、map、multimap;

sets/multisets:內部的元素依據其值自動排序,set內的相同數值的元素只能出現一次,multisets內可包含多個數值相同的元素,內部由二叉樹實現,便於查詢;

maps/multimaps:map的元素是成對的鍵值/實值,內部的元素依據其值自動排序,map內的相同數值的元素只能出現一次,multimaps內可包含多個數值相同的元素,內部由二叉樹實現,便於查詢;

容器的比較:

vector

deque

list

setmultiset

mapmultimap

內部結構

dynamic array

array of arrays

double linked list

binary tree

binary tree

binary tree

binary tree

隨機訪問

yesyes

nono

noyes(key)

no搜尋速度慢慢

很慢快快快

快快速插入移除

尾部首尾

任何位置

----

----

迭代器的作用:能夠讓迭代器與演算法不干擾的相互發展,最後又能無間隙的粘合起來,過載了*,++,==,!=,=運算子。用以操作複雜的資料結構,容器提供迭代器,演算法使用迭代器;

迭代器作用:

(1)能夠讓迭代器與演算法不干擾的相互發展,最後又能無間隙的粘合起來;

(2)過載了*,++,==,!=,=運算子。用以操作複雜的資料結構;

(3)容器提供迭代器,演算法使用迭代器;

簡單例子:

迭代器的分類:

input iterator, output iterator, forward iterator, bidirectional iterator, random access iterator等;

不同容器提供自己的迭代器,所以不同迭代器具有不同的能力;

不同的演算法需要不同的迭代器的能力;相同的演算法需要根據迭代器的能力不同而做相應的優化;

stl演算法部分主要由標頭檔案, , 組成;要使用stl中的演算法函式必須包含標頭檔案,對於數值演算法須包含,中則定義了一些模板類,用來宣告函式物件;

stl中演算法大致分為四類:

非可變序列演算法:指不直接修改其所操作的容器內容的演算法。

可變序列演算法:指可以修改它們所操作的容器內容的演算法。

排序演算法:包括對序列進行排序和合併的演算法、搜尋演算法以及有序序列上的集合操作。

數值演算法:對容器內容進行數值計算。

查詢演算法(13個):判斷容器中是否包含某個值;

adjacent_find:在iterator對標識元素範圍內,查詢一對相鄰重複元素,找到則返回指向這對元素的第乙個元素的forward iterator;否則返回last;

binary_search:在有序序列中查詢value,找到返回true。過載的版本實用指定的比較函式物件或函式指標來判斷相等;

count:利用等於操作符,把標誌範圍內的元素與輸入值比較,返回相等元素個數;

count_if:利用輸入的操作符,對標誌範圍內的元素進行操作,返回結果為true的個數;

equal_range:功能類似equal,返回一對iterator,第乙個表示lower_bound,第二個表示upper_bound;

其他:find,find_end,find_first_of,find_if,lower_bound,upper_bound,search,search_n;

排序和通用演算法(14個):提供元素排序策略;

inplace_merge:合併兩個有序序列,結果序列覆蓋兩端範圍。過載版本使用輸入的操作進行排序;

merge:合併兩個有序序列,存放到另乙個序列。過載版本使用自定義的比較;

nth_element:將範圍內的序列重新排序,使所有小於第n個元素的元素都出現在它前面,而大於它的都出現在後面。過載版本使用自定義的比較操作;

partial_sort:對序列做部分排序,被排序元素個數正好可以被放到範圍內。過載版本使用自定義的比較操作;

partial_sort_copy:與partial_sort類似,不過將經過排序的序列複製到另乙個容器;

其他:partition,random_shuffle,reverse,reverse_copy,rotate, rotate_copy,sort,stable_sort,stable_partition;

刪除和替換演算法(15個);

排列組合演算法(2個):提供計算給定集合按一定順序的所有可能排列組合;

算術演算法(4個);

生成和異變演算法(6個);

關係演算法(8個);

集合演算法(4個);

堆演算法(4個);

多元線性回歸模型檢驗 續上篇

只要有p值的出現,樣本量不超過5000,比如線性回歸和邏輯回歸 搞清楚演算法背後的邏輯才是比較重要的。多元線性回歸需要關注一些什麼點?r2和模型穩定性,也就是那些 是不是穩定的,檢驗模型是不是穩定需要對模型進行診斷。多元線性回歸的輸出變數是連續變數,輸入變數中如果包含離散變數需要做啞變數或one h...

STL容器簡介

stl的容器可以分為以下幾個大類 一 序列容器,有vector,list,deque,string.二 關聯容器,有set,multiset,map,mulmap,hash set,hash map,hash multiset,hash multimap 三 其他的雜項 stack,queue,va...

STL歷史簡介

標準模板庫,也叫 stl,是乙個 c 容器類庫,演算法和迭代器。它提供許多基本演算法,資料結構。stl 是乙個通用庫,即可以充分定製 幾乎所有的 stl 元件都是模板。在你使用 stl 前,你必須了解模板的工作情況。容器和演算法 和許多類庫一樣,stl 包含容器類 可以包含其他物件的類。stl 包含...