Книга написана в 2012 году Николаем Джосаттисом(Nicolai M. Josuttis). Это уже второе издание великолепной книги по стандартной библиотеке C++. При этом, на мой взгляд, книга не заслуженно обходится вниманием и многие списки книг по C++, которые рекомендуются к прочтению, не содержат её. Так, эти списки, обязательно будут содержать Майерса, Саттера, Александреску и Страуструпа, но, очень часто, там не будет ни слова о Джосаттисе. И это большая ошибка; в настоящем обзоре я попытаюсь объяснить почему.
Изучая C++ многие программисты не уделяют должного внимания стандартной библиотеке, что в результате вырождается в написание кода, который лучше и проще решается с помощью стандартной библиотеки. Да, стандартная библиотека C++ очень мала, да многого в ней нет, но, как показывает практика, и то, что есть, мало кто использует. В своей практике я видел множество мест, где навороченные циклы можно было бы заменить на алгоритмы стандартной библиотеки. Код, состоящий из стандартных функций, выглядит намного чище и понятнее, чем нагромождение из циклов. Но для того, чтобы использовать все эти стандартные алгоритмы нужно знать об их существовании и понимать, где и как их можно приложить. Вот здесь The C++ Standar Library и приходит на помощь.
Что в первую очередь хочется отметить – книга не является перепечаткой стандарта или же распечаткой сайтов, на которых приведены все элементы библиотеки C++ с описанием. Отнюдь, книга написана довольно живо и не оставляет впечатления сухого описания функционала, сохраняя, при этом, довольно высокую степень информативности и глубины. Все затронутые в книге темы, помимо описания, содержат примеры применения, которые позволяют понять как та или иная сущность может быть использована. Да, конечно, не все темы освещены одинаково подробно, но наиболее часто используемые части библиотеки, на мой взгляд, рассмотрены со всех сторон. Те части, по которым могут остаться вопросы, сами по себе могли бы потянуть на отдельные книги, поэтому надо отдать должное автору – ему удалось вместить в книгу среднего размера(чуть больше 1000 страниц) довольно большой объём информации, уделив внимания всем темам.
Книга написана таким образом, чтобы читатель смог потихоньку втягиваться в библиотеку без выливания на него целых блоков информации за раз, так, к примеру, вы можете познакомиться с некоторыми контейнерами, и лишь позднее дойти до главы, где есть полное описание и сравнение оных. Таким образом книга может использоваться как учебник, который можно прочитать от корки до корки и как справочник. При этом, я рекомендую хотя бы раз прочитать книгу целиком, это позволит познакомиться с вещами, которые вы, быть может, ранее не знали. В остальном же эта книга является настольной, т.к. представляет собой великолепный справочник. Но я хочу ещё раз подчеркнуть, что являясь великолепным справочником она остаётся и великолепным учебником по стандартной библи��теке C++.
Что же вы узнаете по прочтении данной книги? Вы узнаете множество алгоритмов(о некоторых вы, быть может, и не подозревали!), которые облегчают повседневное кодирование. Познакомитесь со всеми контейнерами, которые предлагает стандартная библиотека, при этом всё это будет описано в таких деталях, которые сложно найти в каком либо другом месте. Тут я немного отвлекусь и расскажу историю семилетней давности: будучи ещё совсем зелёным программистом C++ я читал первое издание The C++ Standard Library, работая в фирме, где C++ я не применял. Вскоре после прочтения(а может и во время чтения) я собеседовался на позицию C++ разработчика и получил вопрос, чем отличается deque от vector. Я ответил всё, что знал по этому теме(то, что вычитал в книге, разумеется), на что получил изумлённый взгляд собеседников и фразу “ладно, ладно, этого мы уже и сами не знаем”. Безусловно, это говорит о степени знаний собеседников, но, тем не менее, это говорит и о качестве информации представленной в книге.
Кроме контейнеров и алгоритмов книга, безусловно, представляет то, что связывает эти понятия воедино – итераторы. Это крайне важная часть библиотеки, которая в полной мере раскрыта в книге. Трио алгоритмы-итераторы-контейнеры являются основной часть библиотеки и, следовательно, они лучше всего раскрыты в книге – им посвящено больше всего материала. Тем не менее, это не единственные темы, которые описаны в книге; помимо вышеупомянутых тем вы встретитесь с умными указателями, регулярными выражениями, потоками ввода/вывода, базовой интернализацией, аллокаторами, а также библиотекой по работе с параллелизмом. В общем книга охватывает всю стандартную библиотеку, не оставляю ни одной темы без внимания.
В этой связи интересно, что будет автор делать, когда библиотека C++ увеличиться на порядок, а это может произойти довольно скоро, т.к. комитет по стандартизации взял курс именно на расширение возможностей стандартной библиотеки и включение в оную всевозможных приятных дополнений. Я надеюсь, что автор продолжит заниматься написанием книг по стандартной библиотеке и будет выпускать двух-, а то и трёхтомники по ней.
В целом я рекомендую читать эту книгу всем без исключения программистам на C++. По моему мнению эта книга стоит на одном уровне с The C++ Programming Language, как по глубине материала, так и по его охвату. Но, в отличии от книги Страуструпа, которую я бы никогда не посоветовал читать новичку, я рекомендую The C++ Standard Library как вторую книгу по C++. Первой всегда будет книга по самому языку, второй же стоит изучать именно эту книгу. Ни Саттера, ни Майерса, ни, упаси Бог, Александресу – Джосаттиса! Но книга, безусловно, не только для новичков. Если вы не читали эту книгу ранее, то весьма велика вероятность, что вы можете узнать много нового из неё. Я нигде больше не встречал такого материала по стандартной библиотеке. Следовательно и мой вердикт – эта книга просто обязательна к прочтению.