首頁  >  文章  >  後端開發  >  stl中的size的坑

stl中的size的坑

高洛峰
高洛峰原創
2016-11-22 15:12:391430瀏覽

去年剛進公司的時候,公司基礎庫裡面有個LRUCache,裡面的實現用的是std::list。但裡面計算std::list的函式直接使用的是stl裡面的size()方法。結果壓測的時候,性能卡在這裡了。
今天,有個同事又在基礎庫裡面發現一個隊列的實現,也用到了std::list,取元素的個數的時候同樣用到了size()方法。
很遺憾的是,公司的基礎庫只暴露了頭文件,無法一一去檢查這個坑是否會在其他地方還會有。

下面看一下stl裡面size()方法的實作:

size_type    
  size() const
      { return std::distance(begin(), end()); }

上面的程式碼g++版本是4.2.1

顯然,複雜度為O(N)。當list裡面元素比較多的時候,計算會很慢。 所以,當使用std::list的時候,一定記得自己維護一個count。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn