在决定任务的最佳数据结构时,需要考虑三个方面:
- 功能:数据结构是否提供了我需要的操作
- 性能:这些操作有多快
- 内存消耗:数据结构使用了多少内存
第一个考虑可以通过检查数据结构的接口找到,第二个只能在基准测试中测量。但是,如果数据结构仅提供一种计算当前使用的内存的方法,则第三种方法非常简单,否则很难。
STL 数据结构没有这种方法。但为什么?在 STL 中为所有数据结构实现这样的方法将非常简单。对于我作为客户来说,写这样的方法是相当困难的,因为我必须熟悉内部实现。此外,实现隐藏在私有成员后面,所以我根本无法访问它们。
那么为什么他们被排除在外呢?目前,在选择数据结构时,许多其他实现,例如当前发布的 google btree 实现都提供了这些方法。比较这些数据结构很容易。但是,当询问 STL 数据结构在内存消耗方面的表现如何时,我基本上能做的就是猜测。
我找不到任何理由为什么忽略这些方法可能是设计决策。此外,C++ 是一种针对高性能和低内存占用而调整的语言。尤其是在这样的语言中,我认为评估数据结构的内存消耗是一个非常常见的用例。所以我也不能认为它们被排除在外,因为没有人会使用它们。另外,STL 也是一个相当成熟的库,所以也不应该是这个库不够完善。那么省略这些方法的原因可能是什么?