Подтвердить что ты не робот

Есть ли читаемая реализация STL?

Я на Linux; глядя на заголовки STL; они действительно очень сложны.

Есть ли где-нибудь более мелкая версия STL, которая имеет основные функции STL, но на самом деле понятна?

Спасибо!

4b9b3361

Ответ 1

Существует книга Стандартная библиотека шаблонов С++, в соавторстве с оригинальными дизайнерами STL Степановым и Ли (вместе с PJ Plauger и David Musser), в которой описывается возможная реализация, в комплекте с кодом - см. http://www.amazon.co.uk/C-Standard-Template-Library/dp/0134376331.

Ответ 2

Да, есть оригинальная реализация 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);
}

Вернемся к корням!

Ответ 4

Выделяются две ключевые точки:

  • Никакая реализация STL не может быть прочитана без понимания целей, обоснований, преимуществ и ограничений самого языка и общего подхода.
  • Большинство реализаций читаются, если у вас есть глубокое понимание (1), потому что код самодокументируется в этих помещениях. Возможно, вам не нравится форматирование, но это действительно должно быть наименьшей из ваших проблем.

В качестве побочной заметки вы можете добиться большего успеха с версией MSVC, поскольку она не пытается нацелить multiple на количество компиляторов. Ошибки компилятора и поведение, определяемое реализацией, приводят к различным тонким обходным решениям. Поскольку эти обходные пути растут в количестве (как это бывает, когда вы добавляете больше компиляторов), код может быстро увеличиться.

Ответ 5

Для более детального и подробного объяснения "правил" STL (таких как итераторы), ознакомьтесь с новой книгой, соавтором которой является Степанов: http://www.elementsofprogramming.com/

Если вам нравится математика, эта книга вас возбудит, потому что то, что авторы описывают, по существу является алгеброй вычислений. На сайте есть образец главы.

Ответ 6

Обратите внимание, что заголовки GCC STL имеют ограничение на вкладку, равное восьми. Переконфигурируйте свой редактор или замените вкладки на восемь пробелов, и это должно быть гораздо более читаемым.

Ответ 7

RDESTL предоставляет "небольшое подмножество функций STL" (но также имеет некоторые дополнительные функции). Я лично нашел код весьма поучительным и более легким в навигации, чем большие ребята, такие как реализация STLPort или Dinkumware, которая поставляется с VС++.

Ответ 8

Ну, STL довольно сложно, поэтому я думаю, что здесь происходит определенная сложность. Не удивительно, что это может показаться немного озадаченным с первого взгляда.

Тем не менее, возможно, вы могли бы проверить Borland STLport и посмотреть, есть ли у вас более легкое чтение.

Ответ 9

STL - это высоко оптимизированная библиотека, которая делает большую часть того, что она делает, умело используя расширенные возможности С++ и базового компилятора. Кроме того, многие вещи встроены, поэтому нет реального набора кода для просмотра, как в приложении. Я бы рекомендовал следовать советам Нейла.