關於學習Vector的一點想法

2021-08-30 05:22:45 字數 626 閱讀 5925

vector代表了c++的動態陣列,大小是動態可增長的。你不必考慮自己手動分配或釋放記憶體,也不必擔心記憶體洩漏,vector幫你做了這一切。vector的使用很簡單,但是要做到有效率,沒那麼容易,了解他背後的實現原理能幫助達到這一目的。

如有不妥的地方,還請大家給出批評建議。

讓我們先看看類的宣告和資料成員:

#include //記憶體分配器標頭檔案,非標準

#include //迭代器標頭檔案,非標準

template //模板類宣告,提供泛型功能。

class vector

從以上我們可以看到,vector用allocator來進行記憶體管理,用三個迭代器來引用這段記憶體。vector的iterator 其實就是t*的別名。我們知道在乙個連續的記憶體裡(陣列),指標是可以做算術運算的,也支援操作,所以vector的iterator也支援算術運算,++,--,+=, -=,,vector的迭代器就是通常的隨機訪問迭代器了。

另外,我想說的是,stl有許多流行的版本,每乙個版本實現都不是相同的,但是原理區別不大。vector的底層實現一般是連續的記憶體(陣列)。deque的實現是連續的記憶體塊,list的是雙鏈表,set和map是紅黑樹。stack和queue都是這些容器的介面卡(用這些容器來實現)。知道這些是很有必要的。

關於學習的一點想法

上了十幾年學,才發現自己很多本質的問題從來沒有想過。人類在發展過程中會遇到各種各樣的問題,面對各種各樣的問題,人們提出了各種解決方法。但是如果不用文字記錄下來,讓更多的人看到,實現知識的傳播,那麼未來的人類面對相同的問題就會一臉懵逼,然後花很多重複時間解決乙個解決過的問題。所以人類把各種問題的解決方...

關於CTFT DTFT DFT的一點想法

關於ctft dtft dft dfs等概念的理解一直是模模糊糊 似是而非的,近日忽然就咂摸到了一點滋味,簡單記錄一下,正確性不敢保證。考慮到計算機只能處理時域離散 頻域離散的訊號,因此時域連續或頻域連續的訊號,計算機無法直接處理 這是大前提 因此需要對連續的訊號進行離散處理,這就需要用到衝激串了 ...

關於工作的一點想法

最近基於spring cloud在做乙個支付閘道器的功能。基於 兩 個服務 格式化服務與子支付服務。格式化服務 接受所以平台的請求,提供公共介面,實現在內部呼叫不同平台的子服務介面。子支付服務 針對不同的支付平台提供相關的支付功能。因為剛剛起步,所以就以剛接觸的第乙個子服務為基礎建立了格式化服務。然...