stl中的size的坑

高洛峰
Lepaskan: 2016-11-22 15:12:39
asal
1478 orang telah melayarinya

去年刚进公司的时候,公司基础库里面有个LRUCache,里面的实现用的是std::list。但是里面计算std::list的函数直接使用的是stl里面的size()方法。结果压测的时候,性能卡在这里了。
今天,有个同事又在基础库里面发现一个队列的实现,也用到了std::list,取元素的个数的时候同样用到了size()方法。
很遗憾的是,公司的基础库只暴露了头文件,无法一一去检查这个坑是否会在其他地方还会有。

下面看一下stl里面size()方法的实现:

size_type    
  size() const
      { return std::distance(begin(), end()); }
Salin selepas log masuk

上面的代码g++版本是4.2.1

显然,复杂度为O(N)。当list里面元素比较多的时候,计算将很慢。 所以,当使用std::list的时候,一定记得自己维护一个count。


Label berkaitan:
stl
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan