是否有一个可读的STL实现?
我在Linux上; 看着STL标题; 他们真的很复杂。
在某个地方,是否有一个STL的核心function较小的版本,但实际上是可读的?
谢谢!
有一本书“C ++标准模板库” ,由原始STLdevise师Stepanov&Lee(与PJ Plauger和David Musser一起)共同撰写,描述了一个可能的实现,并附有代码 – 参见http://www.amazon。; co.uk/C-Standard-Template-Library/dp/0134376331 。
是的,亚历山大•斯捷潘诺夫(Alexander Stepanov)和孟丽(Meng Lee)最初实施了STL。 这是我见过的最具可读性的STL实现。 你可以从这里下载。
以下是对的实现。 请注意源代码的可读性如何:
#include <bool.h> template <class T1, class T2> struct pair { T1 first; T2 second; pair() {} pair(const T1& a, const T2& b) : first(a), second(b) {} }; template <class T1, class T2> inline bool operator==(const pair<T1, T2>& x, const pair<T1, T2>& y) { return x.first == y.first && x.second == y.second; } template <class T1, class T2> inline bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y) { return x.first < y.first || (!(y.first < x.first) && x.second < y.second); } template <class T1, class T2> inline pair<T1, T2> make_pair(const T1& x, const T2& y) { return pair<T1, T2>(x, y); }
回到根源!
我使用C ++标准库:一个教程和参考,并强烈推荐它。 当然,这不是你阅读封面,但是是一个非常方便的参考。 查看亚马逊的评论。
两个关键点脱颖而出:
- 如果没有理解语言本身的目标,理由,好处和局限性以及一般性的方法,STL的实现是不可读的。
- 一旦你对(1)有深入的理解,大部分的实现都是可读的,因为代码在这些前提下是自我logging的。 你可能不喜欢格式化 ,但这应该是你的问题最less的。
作为一个方面说明,你可能会有更多的成功的MSVC版本,因为它不是试图定位多个编译器。 编译器错误和实现定义的行为会导致各种细微的变通方法。 随着这些解决scheme的数量增加(当您添加更多的编译器时肯定会发生这种情况),代码可能会非常快速。
有关STL(如迭代器)的“规则”的最新和全面的解释,请查看Stepanov合着的新书: http : //www.elementsofprogramming.com/
如果你喜欢math,这本书会让你兴奋,因为作者描述的实质上是一个计算代数。 该网站包括一个样本章节。
RDESTL提供了“STLfunction的一小部分”(但也有一些额外的)。 我个人发现这个代码比起用VC ++发布的STLPort或者Dinkumware实现的大个子来说更具启发性,更容易导航。
请注意,GCC的STL标题将制表位设置为八。 重新configuration您的编辑器或用八个空格replace标签,它应该更可读。
那么,STL是相当复杂的,所以我认为这里有一定的复杂性。 乍看起来似乎有些困惑,这并不奇怪。
也就是说,也许你可以看看Borland的STLport ,看看你是否更容易阅读。
STL是一个高度优化的库,它通过巧妙利用C ++和底层编译器的高级function来完成大部分function。 另外,很多东西都是内联的,因此在应用程序中没有真正的一堆代码。 我build议遵循Neil的build议。