STL容器List的乙個小技巧

2021-06-19 17:22:02 字數 532 閱讀 3481

在stl中,list是乙個雙向迴圈鍊錶,所謂迴圈鍊錶就是指鍊錶的頭部和尾部是連線在一起的,下面兩段**實現的功能是一樣的,但是執行過程卻有所不同:

//第一種

listlst1;

if (lst1.empty())

//第二種

listlst2;

if (lst2.size() == 0)

上面兩段**執行的功能都一樣的,都是判斷list集合內是否有元素,但是實際執行的過程卻有所不同。

對於第一種方法,由於list是首尾相連的,因此lst1直接判斷頭部的下乙個節點是否為null就知道list是否有節點了,其時間複雜度為o(1);

對於第二種方法,size()函式的作用是獲取節點的個數,因此lst2會從頭到尾遍歷一次鍊錶,以得到鍊錶節點的個數,其時間複雜度為o(n)。

可見,雖然**量差不多,但是時間複雜度上卻相去甚遠,當節點數較多的時候,兩種寫法相差的時間會越加明顯。因此,當需要判斷list的是否存在節點時,強烈建議使用list的empty()函式。

實現乙個STL的list容器

封裝了list的資料結構,和push back push front pop back pop front size 方法,內嵌了iterator迭代器類,還寫了for each 和accumulate 模板演算法 include include include include using name...

乙個小技巧

下午去牙科看牙,順便幫我媽把鞋上個鞋絆。修鞋的老太太慈眉善目,於是跟她攀談起來。我問她,您看這鞋怎麼樣啊?老太太瞅瞅鞋,笑笑不說話。我又說,這是在沂蒙大樓專櫃買的,打折處理的 款,也不知道質量怎麼樣。老太太嗯嗯幾聲,還是不言語。一邊修著鞋,老太太看我態度還算虛心,就跟我傳授了經驗。大意就是,專櫃處理...

實現乙個STL的vector容器

封裝了vector的資料結構,和push back capacity size 方法,內嵌了iterator迭代器類 include include using namespace std namespace ministl vector 拷貝建構函式 賦值運算子過載函式 void push bac...