Есть ли читаемая реализация STL?
Я на Linux; глядя на заголовки STL; они действительно очень сложны.
Есть ли где-нибудь более мелкая версия STL, которая имеет основные функции STL, но на самом деле понятна?
Спасибо!
Ответы
Ответ 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);
}
Вернемся к корням!
Ответ 3
Я использую Стандартную библиотеку С++: учебное пособие и справочник и могу очень рекомендовать ее. Конечно, это не то, что вы читаете на обложке, но это очень удобная ссылка. Ознакомьтесь с отзывами номеров в отеле Amazon.
Ответ 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 - это высоко оптимизированная библиотека, которая делает большую часть того, что она делает, умело используя расширенные возможности С++ и базового компилятора. Кроме того, многие вещи встроены, поэтому нет реального набора кода для просмотра, как в приложении. Я бы рекомендовал следовать советам Нейла.