我在Linux上;看着STL标题;他们真的很复杂。
在某个地方,是否有一个较小版本的STL具有STL的核心功能,但实际上是否可读?
谢谢!
答案 0 :(得分:27)
有一本书 The C ++标准模板库,由最初的STL设计师Stepanov& S撰写。 Lee(与P.J. Plauger和David Musser一起)描述了一个可能的实现,并附有代码 - 请参阅http://www.amazon.co.uk/C-Standard-Template-Library/dp/0134376331。
答案 1 :(得分:14)
是的,Alexander Stepanov和Meng Lee有STL的原创实施。这是我见过的最易读的STL实现。您可以下载from here。
以下是pair的实现。请注意源代码的可读性:
#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);
}
回到根源!
答案 2 :(得分:6)
我使用The C++ Standard Library: A Tutorial and Reference并强烈推荐它。当然,这不是你从封面到封面阅读的内容,而是一个非常方便的参考。查看亚马逊上的评论。
答案 3 :(得分:5)
请注意,GCC的STL标头的制表位设置为8。重新配置编辑器或用八个空格替换选项卡,它应该更具可读性。
答案 4 :(得分:3)
两个关键点突出:
作为旁注,您可能在MSVC版本上取得了更多成功,因为它并没有尝试将多个作为目标。编译器错误和实现定义的行为导致各种微妙的解决方法。随着这些变通方法的数量不断增加(当你添加更多编译器时肯定会发生这种情况),代码可能会变得非常快。
答案 5 :(得分:3)
有关STL“规则”(如迭代器)的最新和详尽解释,请查看由Stepanov共同撰写的新书:http://www.elementsofprogramming.com/
如果你喜欢数学,这本书会激动你,因为作者所描述的本质上是计算的代数。该网站包含一个示例章节。
答案 6 :(得分:3)
RDESTL提供了“STL功能的一小部分”(但也有一些附加功能)。 我个人发现这些代码比STLPort或Dinkumware的VC ++附带的实现更具有指导性和导航性。
答案 7 :(得分:2)
嗯,STL非常复杂,所以我认为这里有一定的基本复杂性。乍一看似乎有点令人困惑,这并不奇怪。
那就是说,也许你可以查看Borland的STLport,看看你是否觉得它更容易阅读。
答案 8 :(得分:2)
STL是一个高度优化的库,通过巧妙地利用C ++的高级功能和底层编译器来完成它的大部分工作。此外,许多内容都被内联,因此在应用程序中没有真正的代码可供查看。我建议按照尼尔的建议。