list實現的實際上是雙向鏈表,所以叫它doubly-linked list也許更好。 因為實現的是雙向鏈表,所以它有兩個非常重要的性質:
雙向意味著----給定一個元素,我們能夠知道後一個元素和前一個元素。而這在單項鏈表裡是不可能實現的,因為單向鏈表只維護了單個方向的元素信息。
這種具體實現決定了,list的迭代器是雙向迭代器(Bidirectional Iterator)。
鏈表, 即 鏈▪表。 它暗示了鏈接的實質,也就是說,鏈表中的元素存儲單元不一定是順序的,只是通過繩子串連起來(-_-)。 這個事實導致了鏈表的特殊之處----插入和刪除操作是常數時間的。 因為執行這兩個操作的時候,我們只要修改單個元素兩邊的信息就可以了,不必動其他數據。 不像很多用數組作為內部結構的容器,這兩個操作往往需要移動一部分元素來維持元素位置的正確性。
當然了,禍福相依,鏈表的這種機制也導致了它某些方面的欠缺----元素的訪問不是常數時間的。 因為鏈表的順序是通過額外的數據來維護的(一般是指針),獲取元素往往在給定一個迭代器的基礎上通過遍歷來實現,因此在距離上是線性時間復雜度。
基於鏈表的特殊性質(常數時間的插入和刪除操作),list類模版提供了一些特殊的函數: