Heim  >  Artikel  >  Backend-Entwicklung  >  stl中的size的坑

stl中的size的坑

高洛峰
高洛峰Original
2016-11-22 15:12:391430Durchsuche

去年刚进公司的时候,公司基础库里面有个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。


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn