【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...