list 容器,又稱雙向鏈表容器,即該容器的底層是以雙向鏈表的形式實現的。這意味著,list 容器中的元素可以分散存儲在內存空間里,而不是必須存儲在一整塊連續的內存空間中。
圖 1 展示了 list 雙向鏈表容器是如何存儲元素的。
圖 1 list 雙向鏈表容器的存儲結構示意圖
可以看到,list 容器中各個元素的前后順序是靠指針來維系的,每個元素都配備了 2 個指針,分別指向它的前一個元素和后一個元素。其中第一個元素的前向指針總為 null,因為它前面沒有元素;同樣,尾部元素的后向指針也總為 null。
基于這樣的存儲結構,list 容器具有一些其它容器(array、vector 和 deque)所不具備的優勢,即它可以在序列已知的任何位置快速插入或刪除元素(時間復雜度為O(1))。并且在 list 容器中移動元素,也比其它容器的效率高。
使用 list 容器的缺點是,它不能像 array 和 vector 那樣,通過位置直接訪問元素。舉個例子,如果要訪問 list 容器中的第 6 個元素,它不支持容器對象名[6]這種語法格式,正確的做法是從容器中第一個元素或最后一個元素開始遍歷容器,直到找到該位置。