STL 序列式容器 list(簡單複習)

2021-08-03 02:31:51 字數 1229 閱讀 4150

【stl】常用容器總結,帶有複習性質的學習更有效率;

list 和 vector 是最常用的兩個容器,也是在面試中最常被問到的,讓你對比一下這兩個容器;

那麼,首先複習一下 list 的結構,list 底層的資料結構是雙向鍊錶,同時,和vector不同的是,list 的迭代器不再是原生指標, 而是專門封裝的雙向迭代器;

既然是鍊錶,那麼和 vector 一對比, 不同之處就很明顯了, 首先因為是鍊錶結構,所以插入和刪除乙個元素不再向 vector 那麼費勁, 同時刪除乙個元素也不會造成大部分的迭代器失效,只有被刪除的迭代器失效,插入完全不會影響迭代器;

這時候,就需要回顧到 vector 和 list 的適用場景了;

vector適合於頻繁在尾部插入和刪除元素的操作,而 list 則適合於頻繁在中間進行插入和刪除的操作,至於原因,我想,上面說的都很清楚了;
還有一點,就是vector相比於list不需要維護複雜的資料結構;當然vector可以支援下標的隨機訪問,而list 只能遍歷;

list 還有一系列的api, 當然我們平常使用時只把它當做乙個普通的鍊錶來使用,並不會把它當做太複雜,其實,sgi 版的stl–list本質上是乙個環狀雙向鍊錶,不做研究;

這裡演示一下list的插入和刪除迭代器的處理;

#include

#include

using

namespace

std;

int main()

list

::iterator it = l.begin();

while(it != l.end())

it++;

}it = l.begin();

while (it != l.end())

else

}cout

0;}

分析:上面這個例子演示了如何正確使用list的插入和刪除,通過例子我麼可以看到,在迭代器指向2 的時候, 我們在它前面插入了兩個1 , 下面仍然使用迭代器++,在下圖的最終結果中,程式正確執行,如果你自己實驗的話,完全可以在插入之後列印迭代器內容,看看是不是還是指向2;

刪除迭代器就像我們前面說的,list的迭代器只會失效被刪除的那個,所以我們正確的處理方式就是在傳參的時候迭代器後置++,這樣就完美的越過了失效的迭代器,程式正確執行;

STL序列式容器之list

一,list容器基本概念 1.list容器基本知識 二,list容器建構函式 1.無參建構函式 無參建構函式 list l1 2.有參建構函式 有參建構函式,10個字元 a 來初始化容器 list l2 10,a 有參建構函式,用上面的容器初始化下面的容器 list l3 l2.begin l2.e...

STL學習筆記 序列式容器list

由於vector的使用,經常會出現迭代器錯誤,主要是因為vector在每次更改完資料就會重新配置,迭代器就會失效,list的結構和vector的設計差異決定了list在這方面具有優越性,list的insert和splice操作不會造成迭代器失效,並且erase也只會是讓當前元素的迭代器失效。list...

《STL原始碼剖析》 序列式容器(二)list容器

list概述 相較於vector的連續線性空間,list就有點複雜了,但複雜有複雜的好處,每次插入或刪除乙個元素,就配置或釋放乙個元素。因此list不存在浪費空間的問題。而且對於任何位置插入或釋放元素,時間是常值。list的迭代器 首先list的節點 node 是乙個雙向鍊錶。另外list不能像ve...