Я на Linux; глядя на заголовки STL; они действительно очень сложны.
Есть ли где-нибудь более мелкая версия STL, которая имеет основные функции STL, но на самом деле понятна?
Спасибо!
Я на Linux; глядя на заголовки STL; они действительно очень сложны.
Есть ли где-нибудь более мелкая версия STL, которая имеет основные функции STL, но на самом деле понятна?
Спасибо!
Существует книга Стандартная библиотека шаблонов С++, в соавторстве с оригинальными дизайнерами STL Степановым и Ли (вместе с PJ Plauger и David Musser), в которой описывается возможная реализация, в комплекте с кодом - см. http://www.amazon.co.uk/C-Standard-Template-Library/dp/0134376331.
Да, есть оригинальная реализация 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);
}
Вернемся к корням!
Я использую Стандартную библиотеку С++: учебное пособие и справочник и могу очень рекомендовать ее. Конечно, это не то, что вы читаете на обложке, но это очень удобная ссылка. Ознакомьтесь с отзывами номеров в отеле Amazon.
Выделяются две ключевые точки:
В качестве побочной заметки вы можете добиться большего успеха с версией MSVC, поскольку она не пытается нацелить multiple на количество компиляторов. Ошибки компилятора и поведение, определяемое реализацией, приводят к различным тонким обходным решениям. Поскольку эти обходные пути растут в количестве (как это бывает, когда вы добавляете больше компиляторов), код может быстро увеличиться.
Для более детального и подробного объяснения "правил" STL (таких как итераторы), ознакомьтесь с новой книгой, соавтором которой является Степанов: http://www.elementsofprogramming.com/
Если вам нравится математика, эта книга вас возбудит, потому что то, что авторы описывают, по существу является алгеброй вычислений. На сайте есть образец главы.
Обратите внимание, что заголовки GCC STL имеют ограничение на вкладку, равное восьми. Переконфигурируйте свой редактор или замените вкладки на восемь пробелов, и это должно быть гораздо более читаемым.
RDESTL предоставляет "небольшое подмножество функций STL" (но также имеет некоторые дополнительные функции). Я лично нашел код весьма поучительным и более легким в навигации, чем большие ребята, такие как реализация STLPort или Dinkumware, которая поставляется с VС++.
Ну, STL довольно сложно, поэтому я думаю, что здесь происходит определенная сложность. Не удивительно, что это может показаться немного озадаченным с первого взгляда.
Тем не менее, возможно, вы могли бы проверить Borland STLport и посмотреть, есть ли у вас более легкое чтение.
STL - это высоко оптимизированная библиотека, которая делает большую часть того, что она делает, умело используя расширенные возможности С++ и базового компилятора. Кроме того, многие вещи встроены, поэтому нет реального набора кода для просмотра, как в приложении. Я бы рекомендовал следовать советам Нейла.