effective STL 某個Item里重點提出了 list.size()是一個O(n)的效率 當時只是記下來了 后面看了csdn有人在實際工程上遇到坑了 我近來閑來無事 把STL的list相關部分好好看下:
看看STL大牛們設置成O(n)的原因:
1) size() 調用algorithm里的distance() 得出長度 而empty()就是判斷頭和尾是否相等 O(1) 大部分情況下 咱們都是判斷這個list是否為空
2) 設計原因: list引入了一個重要的splice操作,在常量級別也就是o(1)完成list的tranfer 這個操作對merge reverse sort有很大的幫助 如果:
size()不這樣做 那么tranfer就不能是o(1)完成 不是o(1) 那么就在Merge 和sort就不能高效完成 而且事實上 merge 和sort操作顯的更為重要些,所以size()在每次調用時調用distance 而不是更好的O(1) 這樣就可以均攤tranfer的常量級操作 看到網上人吐槽這個地方 我想懂了上述設計原理 也不會吐槽這個結構了。