C++ list size()所想到的事情


  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的常量級操作  看到網上人吐槽這個地方  我想懂了上述設計原理  也不會吐槽這個結構了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM