STL原始碼剖析之元件

2022-04-29 11:15:09 字數 1166 閱讀 2604

本篇文章開始,進行stl原始碼剖析的一些知識點,後續系列筆記全是參照《stl原始碼剖析》進行學習記錄的

stl在現在的大部分專案中,實用性已經沒有boost庫好了,畢竟stl中僅僅提供了一些容器供編碼者實用,boost庫相對而言全面了許多,所以更適合做一些專案的開發。但stl原始碼中依然有很多我們值得學習,思考的地方,包括現在大部分面試,都會問及到stl的框架原始碼部分。所以決定將這本書其中重要的幾個部分拉出來做個筆記,以加深記憶並和大神們****。

先簡單介紹一下stl中的大致組成部分,一張圖就明了

1,容器(containers):主要是各種資料結構,比如向量(vector)、鍊錶(list)、佇列(deque)、集合(set)、圖(map)。這些結構均用來存放資料,這些容器也是大部分開發人員最常接觸到的內容。

2,演算法(algorithms):常用的演算法,比如排序(sort),查詢(search)、拷貝(copy)、刪除(erase)。演算法主要是為了容器能夠更高效的使用。

3,迭代器(iterator):容器與演算法之間的膠合劑,是所謂的「泛型指標」。個人感覺可以理解乙個容器中資料型別的指標,可以快速,方便的對資料進行管理和傳參,通過迭代器實現了對operators*,operator->,operator++,operator--進行過載。每乙個容器都有自己特殊的迭代器操作方式。

4,仿函式(functors):相當於乙個類中進行了operators(),這個類就有了類似函式的使用方式,例如class fun....  fun::(int a,int b),fun類中對()有進行過過載,可以當做函式來使用。

5,配接器(adapters):修飾容器、仿函式、迭代器的介面方法。例如 queue 和 stack 的方法實現底層完全依靠 depue 的方法實現,所以我們就可以將這類容器當做一種配接器容器。

6,配置器(allocators):負責空間配置與管理,實現空間動態分配、管理、釋放。

如果是一名不常用stl編寫**的程式設計師,只要掌握容器、迭代器、仿函式的一些使用方法就可以用於專案。但作為一名「負責任」的程式設計師,還是盡可能的把原始碼都挖出來研究一下,畢竟stl最早期的原始碼還是存在一些漏洞和不夠完美的地方,這些問題也會在後面的學習和研究中慢慢記錄出來。

STL之deque原始碼剖析

deque是一種那個雙向開口的連續線性空間,其頭尾端做元素的插入和刪除效率比vector效率高很多。deque和vector的最大差異,一在於deque允許常數時間內對頭尾端進行元素插入或移除操作,二在於deque沒有所謂容量概念,因為它是動態地分段連續空間組合而成,隨時可以增加一段新的空間並鏈結起...

STL原始碼剖析之vector

向量vector 1.vector概述 vector的資料安排以及操作方式,與array非常相似。兩者的唯一差別在於空間的運用的靈活性。array是靜態空間,一旦配置了就不能改變 vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。vector的實現技術,關鍵在於其對大小...

STL原始碼剖析之Iterator

typename一般來說用法比較簡單,在定義模板的時候宣告乙個類引數。template class demo 這個時候typename和class沒有任何區別。但是typename還有其他用法。乙個類除了有類的成員變數 成員函式之外,還可以有類的定義。template class demo 這種定義...