編程語言的容器的學習

C++的容器

最近在作一些leetcode的題,有時選擇了用C++來寫,離不開一些C++容器的使用。因而總結一下C++容器。java

順序性容器

vector

  1. vector是一種動態數組,在內存中具備連續的存儲空間,支持快速隨機訪問。因爲具備連續的存儲空間,因此在插入和刪除操做方面,效率比較慢。
  2. 默認的構造函數是構造一個初始長度爲0的內存空間,且分配的內存空間是以2的倍數動態增加的。
  3. 在push_back的過程當中,若發現分配的內存空間不足,則從新分配一段連續的內存空間,其大小是如今連續空間的2倍,再將原先空間中的元素複製到新的空間中。
  4. clear函數只是把vector的size清爲零,但vector中的元素在內存中並無消除,因此在使用vector的過程當中會發現內存消耗會愈來愈多,致使內存泄露,如今常常用的方法是swap函數來進行解決。
  5. 利用swap函數,和臨時對象交換,使V對象的內存爲臨時對象的內存,而臨時對象的內存爲V對象的內存。交換之後,臨時對象消失,釋放內存。
vector<int> V;
    V.push_back(1); 
    V.push_back(2);
    vector<int>().swap(V); 
    //或者 V.swap(vector<int>());
複製代碼

deque

deque支持雙端插入數據。deque的內存空間分佈是小片的連續,小片間用鏈表相連,實際上內部有一個map的指針。deque空間的從新分配要比vector快,從新分配空間後,原有的元素是不須要拷貝的。數組

list

支持常數時間從容器任何位置插入和移除元素的容器。不支持快速隨機訪問。它一般實現爲雙向鏈表。函數

關聯容器

map

map是一種關聯容器,該容器用惟一的關鍵字來映射相應的值,即具備key-value功能。map內部自建一棵紅黑樹(一種自平衡二叉樹),這棵樹具備數據自動排序的功能,因此在map內部全部的數據都是有序的,以二叉樹的形式進行組織。ui

set

  1. set同map同樣,底層使用紅黑樹實現,插入刪除操做時僅僅移動指針便可,不涉及內存的移動和拷貝,因此效率比較高。
  2. set中的元素都是惟一的,並且默認狀況下會對元素進行升序排列。

容器適配器

queue

queue是一個隊列,實現先進先出功能。queue是在deque的基礎上封裝的。spa

stack

stack是實現先進後出的功能,和queue同樣,也是內部封裝了deque。3d

java的容器

第一個圖爲簡化圖(其中粗線部分是重點的容器),第二個圖爲完整容器分類圖指針

java的容器和kotlin容器的比較

相關文章
相關標籤/搜索