是否有可读的STL实现?

ano*_*non 40 c++ stl

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

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

谢谢!

小智 27

有一本书C++标准模板库,由最初的STL设计师Stepanov&Lee(与PJ Plauger和David Musser一起)共同撰写,描述了一个可能的实现,包括代码 - 请参阅http://www.amazon. co.uk/C-Standard-Template-Library/dp/0134376331.


ezp*_*sso 14

是的,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);
}
Run Code Online (Sandbox Code Playgroud)

回到根源!


bah*_*ree 6

我使用The C++标准库:教程和参考,可以强烈推荐它.当然,这不是你从封面到封面阅读的内容,而是一个非常方便的参考.查看亚马逊上的评论.

  • 一本好书,但不能解决这个问题. (14认同)

Pot*_*ter 6

请注意,GCC的STL标头将制表位设置为8.重新配置编辑器或用八个空格替换选项卡,它应该更具可读性.


Sam*_*ell 5

有两个关键点很突出:

  1. 如果不了解语言本身的目标、基本原理、优点和局限性以及一般方法,STL 的实现就不具有可读性。
  2. 一旦您深入了解 (1),大多数实现都是可读的,因为代码在这些前提下是自我记录的。您可能不喜欢这种格式,但这确实应该是您遇到的最小问题。

附带说明一下,使用 MSVC 版本可能会取得更大的成功,因为它不会尝试针对多个编译器。编译器错误和实现定义的行为会导致各种微妙的解决方法。随着这些解决方法数量的增加(当您添加更多编译器时肯定会发生这种情况),代码可能会变得非常快。