Nei*_*l G 20 c++ containers boost
它在这里说
无界数组类似于std :: vector,因为它的大小可以超过任何固定边界.然而,unbounded_array旨在实现最佳性能.因此,unbounded_array不像std :: vector那样对序列进行建模.
这是什么意思?
Gra*_*bot 13
作为一名Boost开发人员,我可以告诉你,对文档中的陈述提出质疑是完全可以的;-)
从阅读这些文档,阅读源代码(参见storage.hpp),我可以说,在编写代码时对std :: vector的实现做了一些假设,这有点正确.该代码最初可以追溯到2000年,也许可以追溯到2002年.这意味着当时许多STD实现都没有很好地优化容器中对象的破坏和构造.关于非调整大小的主张很容易通过使用最初的大容量向量来驳斥.我认为,关于速度的主张完全来自于unbounded_array具有特殊的代码,用于在存储的对象具有琐碎的实现时消除dtors和ctors.因此,它可以避免在必须重新排列事物或复制元素时调用它们.与最近的STD实现相比,它不会更快,因为新的STD实现倾向于利用诸如移动语义之类的东西来进行更多的优化.
Pot*_*ter 12
它似乎缺乏insert和erase方法.因为这些可能是"慢",即它们的性能取决于size()在vector实施中,他们被省略,以防止程序员从拍摄自己的脚.
insert和erase由标准所要求的容器被称为一个序列,所以不像vector,unbounded_array是不是一个序列.
由于未能成为序列本身就没有效率.
但是,它是在它的存储器分配方案更有效的,通过避免的概念vector::capacity和始终具有所分配的块的内容的准确尺寸.这使得unbounded_array对象变小并使堆上的块完全像它需要的那样大.
| 归档时间: |
|
| 查看次数: |
1459 次 |
| 最近记录: |