為什麼 c++比 c 開發塊 因為有 stl
stl
c++程式設計師必備技能
stl有多個版本 stl是一套標準
vs 編譯器
gcc編譯器
泛型程式設計
程式盡可能通用
將演算法從資料結構中抽象出來,成為通用的
通用介面比如排序 陣列能用 鍊錶能用 ....因為統一介面
stl做了什麼
包含常用的資料結構
資料結構:鍊錶 陣列 二叉樹 ...
包含常用的基本演算法
基本演算法:插入 刪除 排序 查詢.....
提供了一套可擴充套件框架
stl提供了可以擴充套件泛型程式設計的框架,因為都是介面所以可以繼承
stl六大元件
容器 演算法 迭代器 函式物件 分配器 介面卡
容器(container)
vector(
向量)
連續的空間叫做陣列 有序的
隨機訪問 往後插入 刪除 非常塊
隨機插入 刪除 非常慢
如何做到可變長
申請乙個空間 當用完之後在申請乙個當前空間*2的大小
把之前空間裡面的資料複製過去然刪除原來空間
小技巧當需要的資料量比較大的時候 直接分配乙個夠大的空間
deque(雙端佇列)
陣列map 裡面裝的都是別人陣列的指標
優點 前後的插入速度快
缺點 隨機訪問 通過 map -》位址-》裡面的值 訪問慢
list(鍊錶)
單項鍊表
head next
雙向鍊錶(環形列表,....設計方式很多)
優點 資料插入 刪除 塊
缺點 訪問慢(on)
set(集合)
multiset(多重集合) 序號可以重複
通過二叉樹實現 紅黑樹(會把順序打亂)(搜尋 二分法不管搜尋多少資料速度都差不多),其實它裡面是有序的。c++11增加倆個容器 她
是用 雜湊表實現的
set 是通過序列號隨機訪問
map(對映)
multimap(多重對映 --key可以重複)
map 是通過 key and value
演算法(algorithm)
各種基礎演算法 sort,search
迭代器(iterator)
作用:鏈結 容器+演算法
smart point 小指標
在乙個容器的元素上進行遍歷,也可以是容器的一部分,所以迭代器實現了++和*進行提取值類似於指標,使用++可以遍歷下乙個元素,如何比那裡取決於容器內部的資料組織形式。
介面卡(adapters)
改變了container或iterator或function object介面元件
容器介面卡
棧 佇列 優先佇列
迭代器介面卡
反向迭代器
插入迭代器
io迭代器
函式介面卡
函式物件介面卡
成員函式介面卡
普通函式介面卡介面卡做的有可能遮蔽一些介面
函式物件(function object)
分配器(allorator)
都是實現可擴充套件的介面
序列式容器(有序的)
vecor deque list
頻繁的插入(刪除),不用在序列內部長距離調轉,應該用list
在vecor頭部和中間插入(刪除)效率低下,在尾部插入刪除效率高
deque在頭部和尾部插入與刪除效率高,時間訪問速度比vector低
關聯式容器(無序的)
set multiset
map multimap
時間複雜度
我要幾步操作才能能
o1 最快直接讀取一步完成
o2 兩步到位
on 是你裡面有多少個元素進行多少步 這是最慢的
onn 冒泡就是 乙個元素要n次 在
STL演算法概述
除了容器類和迭代器,stl還提供了一些通用的演算法與容器類的元素工作。這些讓你做的事情,如搜尋,排序,插入,重新排序,刪除,複製元素的容器類。請注意,作為全球性的功能,操作使用迭代器演算法的實現。這意味著,每個演算法只需要實現一次,它一般會自動工作,提供了一組迭代器 包括自定義的容器類 的所有容器。...
STL 容器概述
在實際的開發過程中,資料結構本身的重要性完全不遜於演算法的重要性,當程式中存在著對時間要求很高的部分時,資料結構的選擇就顯得更加重要。試想 如同棧一樣的一條死胡同裡停車,這樣的效率會很高嗎?經典的資料結構數量有限,但是在專案實戰中,我們常常重複著一些為了存放不同資料結構型別而實現順序表 鍊錶等結構而...
C 學習筆記 STL概述
c 語言的核心優勢就是便於軟體的重用。c 中有兩個方面體現重用 1.物件導向的思想 繼承和多型,標準類庫 2.generic programming 泛型程式設計 的思想 模板機制以及標準模板庫 stl 也就是說使用模板的程式設計。stl standard template library 就是一些...