Здравствуйте, cpp_beginner, Вы писали:
_>Пытаясь разобраться, как реализованы алгоритмы стандартной библиотеки, приходится продираться через заборы #ifdef, отладочных макросов, да и просто через, так сказать, своеобразный coding style (реализация от MS, другие пока не пробовал). _>Тут же захотелось странного — а что, если создать реализацию STL (хотя бы только в виде контейнеры + алгоритмы), предназначенную исключительно для учебных целей — т.е. максимально прозрачный код, снабженный комментариями и документацией. Существует ли что-нибудь подобное?
_>Да, еще интересно — какая из книг по STL максимально описывает ее "внутренности"? Я понимаю, что существуют разные реализации, но на всех них налагает свои требования Стандарт, так что различия не должны быть принципиальны Все уже украдено до нас Вводи в строке поиска имя алгоритма и получаешь и пример реализации и пример использования
Здравствуйте, cpp_beginner, Вы писали:
_>Тут же захотелось странного — а что, если создать реализацию STL (хотя бы только в виде контейнеры + алгоритмы), предназначенную исключительно для учебных целей — т.е. максимально прозрачный код, снабженный комментариями и документацией. Существует ли что-нибудь подобное?
(из того, что видел)
Максимально прозрачный код — версия от авторов, HP STL. Но следует понимать, то не она писалась по Стандарту, а наоборот и там нет iostreams и т.п. И нет комментариев.
Наиболее хорошо откомментирована Стандартная библитотека (бранч SGI) из поставки GCC (для Винды качаем MinGW). Можно пропустить сорцы через Doxygen и получить доку в HTML. Других вариантов с комментариями не знаю (если не считать ONTL, но... там довольно много "но" в частности к алгоритмам и контейнерам комментарии появятся только на следующей итерации)
Еще, следует учесть, что современные версии библиотеки оптимизируются, в частности за счет частичных специализаций, поэтому код выходит несколько запутанным, реализации дробятся на функции с __ в именах.
Касаемо "учебных целей" — инженерам пристало учиться у природы, обратить внимание, что каждая сущность имеет как минимум двойственное предназначение ("голова нам дана не только что бы думать, но и соображать", "а еще мы туда едим"), поэтому если будешь создавать — лучше иметь в запасе и "план Б".
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
cpp_beginner wrote: > Пытаясь разобраться, как реализованы алгоритмы стандартной библиотеки, > приходится продираться через заборы #ifdef, отладочных макросов, да и > просто через, так сказать, своеобразный coding style (реализация от MS, > другие пока не пробовал).
Изучай лучше реализацию из GCC. Разительное отличие в этом плане.
Пытаясь разобраться, как реализованы алгоритмы стандартной библиотеки, приходится продираться через заборы #ifdef, отладочных макросов, да и просто через, так сказать, своеобразный coding style (реализация от MS, другие пока не пробовал).
Тут же захотелось странного — а что, если создать реализацию STL (хотя бы только в виде контейнеры + алгоритмы), предназначенную исключительно для учебных целей — т.е. максимально прозрачный код, снабженный комментариями и документацией. Существует ли что-нибудь подобное?
Да, еще интересно — какая из книг по STL максимально описывает ее "внутренности"? Я понимаю, что существуют разные реализации, но на всех них налагает свои требования Стандарт, так что различия не должны быть принципиальны.
Здравствуйте, cpp_beginner, Вы писали:
_>Да, еще интересно — какая из книг по STL максимально описывает ее "внутренности"? Я понимаю, что существуют разные реализации, но на всех них налагает свои требования Стандарт, так что различия не должны быть принципиальны.
Все уже украдено до нас Вводи в строке поиска имя алгоритма и получаешь и пример реализации и пример использования
Боюcь, что там описаны приблизительные реализации только самые тривиальных вещей (типа find).
Сходу (безуспешно) попробовал найти: partial_sort, sort, vector::rend, next_permutation.
Вобще, по моему мнению, все же лучше хорошая книга по STL. Например — Джосатис "C++. Стандартная библиотека". Эта книга даст очень хорошую базу пользователю STL.
К сожалению, реализацию, простую для анализа, посоветовать не могу. В принципе, при небольшой сноровке и с хорошим инструментарием (вроде visual assist) вполне можно понять и реализацию, идущую с MS VC (лучше, таки да, старенькую взять, например, от VS98).