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