是否有可读的STL实现?

时间:2010-01-24 15:51:31

标签: c++ stl

我在Linux上;看着STL标题;他们真的很复杂。

在某个地方,是否有一个较小版本的STL具有STL的核心功能,但实际上是否可读?

谢谢!

9 个答案:

答案 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)

两个关键点突出:

  1. 如果不了解语言本身的目标,基本原理,好处和局限性以及一般方法,就无法实现STL的实现。
  2. 一旦您对(1)有深入的了解,大多数实现都是可读的,因为代码在这些前提下是自我记录的。您可能不喜欢格式,但这确实应该是您遇到的最少问题。
  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 ++的高级功能和底层编译器来完成它的大部分工作。此外,许多内容都被内联,因此在应用程序中没有真正的代码可供查看。我建议按照尼尔的建议。