對於STL的理解

2021-05-28 02:04:04 字數 742 閱讀 8822

stl (standard template library ) stl是一些「容器」的集合,這些「容器」有list,vector,set,map等,stl也是演算法和其他一些元件的集合。這裡的「容器」和演算法的集合指的是世界上很多聰明人很多年的傑作。stl的目的是標準化元件,這樣就不用重新開發,可以使用現成的元件。stl現在是c++的一部分,因此不用額外安裝什麼。

stl 由以下五部分組成:

stl containers

iterators

allocators

algrithms

object functions

在c++標準中,stl被組織為下面的13個頭檔案:、、、、、、、、、、、和。

我在這裡記錄一下我理解的list,vector和map的用法與區別。

vector 和陣列類似 ,擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨機訪問(即使用[  ] 操作符訪問其中的元素 ),但由於記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝(複雜度是o(n)),另外,當該陣列後的記憶體空間不夠時,需要重新申請一塊足夠大的記憶體並進行記憶體的拷貝。這些都大大影響了vector的效率。

list是由資料結構中的雙向鍊錶實現的,因此它的記憶體空間可以是不連續的。因此只能通過指標來進行資料的訪問,這個特點使得它的隨機訪問變的非常沒有效率,需要遍歷中間的元素,搜尋複雜度o(n),因此它沒有提供[  ]操作符的過載。但由於鍊錶的特點,它可以以很好的效率支援任意地方的刪除和插入。

具體的參見:

對於ftok的理解

回顧了一下以前的實驗,一直不理解為什麼在訊息佇列中要使用ftok,比如下面的乙個例項 if key ftok a 1 qid msgget key,ipc creat 0666 建立乙個訊息佇列 if qid 0 printf created queue id d n qid 輸出訊息佇列的id 要...

對於Zookeeper的理解

zookeeper是google 的chubby乙個開源的實現,是hadoop 的分布式協調服務。它包含乙個簡單的原語集,分布式應用程式可以基於它實現同步服務,配置維護和命名服務等。zookeeper包括乙個leader和多個follower。為什麼使用zookeeper?大部分分布式應用需要乙個主...

對於mvc的理解

經常有人混淆mvc和軟體的三層架構,經過一年多的工作,說一下自己的理解。mvc,是一種設計思想,只是個指導方針。這個方針是 乙個工程可以分為表現層,控制器,資料模型。控制器就是乙個轉接頭,兩邊對接表現層和資料模型。比如mvc的一種表現形式 26個英文本母就是26個資料模型,組合出的單詞就是無數個表現...