vector的資料安排以及操作方式,與array非常相似。兩者的唯一區別在於空間的運用的靈活性。array是靜態空間,一旦配置了就不能改變;vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。因此,vector的運用對於記憶體的合理利用與運用的靈活性有很大的幫助。
vector的實現技術,關鍵在於其對大小的控制以及重新配置時的資料移動效率。一旦vector的舊有空間滿載,如果客戶端每新增乙個元素,vector的內部只是擴充乙個元素的空間,實為不智。因為所謂擴充空間(不論多大),一如稍早所說,是」 配置新空間/資料移動/釋還舊空間 「的大工程,時間成本很高,應該加入某種未雨綢繆的考慮。
另外,由於 vector維護的是乙個連續線性空間,所以vector支援隨機訪問 。
注意:vector動態增加大小時,並不是在原空間之後持續新空間(因為無法保證原空間之後尚有可供配置的空間),而是以原大小的兩倍另外配置一塊較大的空間,然後將原內容拷貝過來,然後才開始在原內容之後構造新元素,並釋放原空間。因此, 對vector的任何操作,一旦引起空間重新配置,指向原vector的所有迭代器就都失效了 。這是程式設計師易犯的乙個錯誤,務需小心。
vector的工作原理是系統預先分配一塊capacity大小的空間,當插入的資料超過這個空間的時候,這塊空間會讓某種方式擴充套件,但是你刪除資料的時候,它卻不會縮小。
vector為了防止大量分配連續記憶體的開銷,保持一塊預設的尺寸的記憶體,clear只是清資料了,未清記憶體,因為vector的capacity容量未變化,系統維護乙個的預設值。
有什麼方法可以釋放掉vector中占用的全部記憶體呢?
標準的解決方法如下
template
< class t >
void clearvector( vector
< t >& vt )
map容器指的是關聯陣列,所謂「關聯」指的是元素的值與鍵之間的關聯,通過鍵來訪問值。用紅黑樹實現的。
map的特性:所有元素根據鍵值自動被排序,map的所有元素都是pair,同時擁有鍵值(key)和實值(value)。map不允許兩個元素擁有相同的鍵值。
紅黑樹是一種平衡二叉搜尋樹,典型的用途是實現關聯陣列。
紅黑樹是具有著色性質的二叉查詢樹,除了二叉查詢樹的要求,必須滿足一下規則:
性質1. 節點是紅色或黑色。
性質2. 根節點是黑色。
性質3.如果乙個節點是紅色,它的子節點必須是黑色。
性質4. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
這些約束強制了紅黑樹的關鍵性質: 從根到葉子的最長的可能路徑不多於最短的可能路徑的兩倍長。結果是這個樹大致上是平衡的。因為操作比如插入、刪除和查詢某個值的最壞情況時間都要求與樹的高度成比例,這個在高度上的理論上限允許紅黑樹在最壞情況下都是高效的,而不同於普通的二叉查詢樹。
雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。
紅黑樹相關面試題
紅黑樹是乙個二叉查詢樹,不像平衡二叉樹要求所有節點左右子樹高度差不超過1,紅黑樹只要求從乙個節點到所有葉結點的路徑中,最長路徑不超過最短路徑的兩倍,所以紅黑樹只追求樹的大致平衡。因為對樹平衡程度的不同要求,平衡二叉樹在插入和刪除的過程中會花費比較大的代價來維護樹的平衡,所以平衡二叉樹不適合插入 刪除...
B樹,B 樹,紅黑樹 資料庫常見面試題
b樹,b 樹,紅黑樹 資料庫常見面試題 hash索引和b 樹索引 hash索引等值查詢效率高,但是不能排序,因此不能進行範圍查詢 b 樹索引資料有序,能夠進行範圍查詢 二叉查詢樹,查詢到指定資料,效率其實很高logn。但是資料庫索引檔案有可能很大,關係型資料儲存了上億條資料,索引檔案大則上g,不可能...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...