Эффективное использование STL

Эффективное использование STL

Скотт Мейерс

Описание

Скотт Мейерс, известный эксперт в области программирования C++, в книге "Эффективное использование STL" раскрывает секреты работы с мощной библиотекой STL. Книга не просто описывает возможности STL, а показывает, как максимально эффективно использовать ее инструменты. 50 практических советов, подкрепленных анализом и примерами, помогут вам не только решать задачи, но и понимать, когда и почему стоит выбрать определённое решение. Эта книга – незаменимый помощник для всех программистов, желающих освоить STL на практике и добиться максимальной эффективности в своих проектах.

<p>Эффективное использование STL</p><p>Предисловие</p>

«...На нем не было ленточки! Не было ярлыка! Не было коробки и не было мешка!»

Доктор Зюсс, «Как Гринч украл Рождество»

Я впервые написал о STL (Standard Template Library) в 1995 году. Моя книга «More Effective C++» завершалась кратким обзором библиотеки. Но этого оказалось недостаточно, и вскоре я начал получать сообщения с вопросом, когда будет написана книга «Effective STL».

Несколько лет я сопротивлялся этой идее. Сначала я не обладал достаточным опытом программирования STL и не считал возможным давать советы. Но время шло, и на смену этой проблеме пришли другие. Бесспорно, появление библиотеки означало прорыв в области эффективной масштабируемой архитектуры, но в области использования STL возникали чисто практические проблемы, на которые было невозможно закрывать глаза. Адаптация любых программ STL, за исключением самых простейших, была сопряжена с множеством проблем, что объяснялось не только различиями в реализациях, но и разным уровнем поддержки шаблонов компиляторов. Учебники по STL были редкостью, поэтому постижение «дао программирования в STL» оказывалось задачей непростой. А как только программист справлялся с этой трудностью, возникала другая — поиск достаточно полной и точной справочной документации. Даже самая мелкая ошибка при использовании STL сопровождалась лавиной диагностических сообщений компилятора, длина которых достигала нескольких тысяч символов, причем в большинстве случаев речь шла о классах, функциях и шаблонах, не упоминавшихся в программе. При всем уважении к STL и разработчикам этой библиотеки я не решался рекомендовать ее программистам среднего звена. Я не был уверен в том, что STL можно использовать эффективно.

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

Более того, я знал, что ситуация с STL будет улучшаться. Библиотеки и компиляторы будут постепенно приближаться к требованиям Стандарта (так оно и было), появится качественная документация (см. список литературы на с. 203), а диагностика компилятора станет более вразумительной (в этой области ситуация оставляет желать лучшего, но рекомендации совета 49 помогут вам с расшифровкой сообщений). В общем, я решил внести свою лепту в движение STL. Так появилась эта книга — 50 практических советов по использованию STL в C++.

Сначала я намеревался написать книгу за вторую половину 1999 г. и даже набросал ее примерную структуру. Но потом планы изменились, я приостановил работу над книгой и разработал вводный курс по STL, который преподавался нескольким группам программистов. Примерно через год я вернулся к книге и значительно расширил материал на основании опыта, полученного за время преподавания. В книге я постарался осветить практические аспекты программирования в STL, особенно важные для профессиональных программистов.

Скотт Дуглас МейерсСтаффорд, ОрегонАпрель 2001 г.<p>Благодарности</p>

За годы, которые потребовались на то, чтобы разобраться в STL, разработать учебный курс и написать эту книгу, я получил неоценимую помощь и поддержку от множества людей. Хочу особо отметить Марка Роджерса (Mark Rodgers), великодушно предложившего просматривать материалы учебного курса по мере их написания. От него я узнал об STL больше, чем от кого-либо другого. Марк также выполнял функции технического редактора этой книги, а его замечания и дополнения помогли улучшить практически весь материал.

Другим выдающимся источником информации были конференции Usenet; посвященные языку C++, особенно comp.lang.c++.moderated («clcm»), comp.std.c++ и microsoft.public.vc.stl. Свыше десяти лет участники этих и других конференций отвечали на мои вопросы и ставили задачи, над которыми мне приходилось думать. Я глубоко благодарен сообществу Usenet за помощь в работе над этой книгой и моими предыдущими публикациями по C++.

Мое понимание STL формировалось под влиянием ряда публикаций, самые важные из которых перечислены в конце книги. Особенно много полезного я почерпнул из труда Джосаттиса «The C++ Standard Library» [3].

Похожие книги

Основы программирования в Linux

Татьяна Коротяева, Нейл Мэтью

В четвертом издании книги "Основы программирования в Linux" вы найдете подробное руководство по программированию в операционной системе Linux. Книга охватывает использование библиотек C/C++, системных вызовов, файлового ввода/вывода, взаимодействия процессов, программирования командной оболочки и создания графических интерфейсов с помощью GTK+ или Qt. Вы узнаете, как компилировать, компоновать программы с библиотеками и работать с терминальным вводом/выводом. Учебник также содержит практические советы по написанию приложений для GNOME и KDE, хранению данных с использованием MySQL и отладке программ. Четкая структура и понятные примеры делают процесс обучения быстрым и эффективным. Идеально подходит для начинающих Linux-программистов, стремящихся освоить основы программирования в этой мощной операционной системе.

97 этюдов для архитекторов программных систем

Нил Форд, Билл де Ора

Архитекторы программного обеспечения играют ключевую роль в успехе проектов. Книга "97 Этюдов для архитекторов программных систем" предлагает практические советы от ведущих специалистов. Она охватывает широкий спектр тем, от решения распространенных проблем до создания эффективных команд. Авторы, включая Билла де Ору, Майкла Хайгарда и Нила Форда, делятся своим опытом, предлагая решения для повышения качества и эффективности работы в сфере разработки ПО. Книга является ценным ресурсом для всех, кто хочет улучшить свои навыки проектирования архитектуры программных систем и добиться успеха в IT-профессии.

Искусство программирования для Unix

Эрик Стивен Реймонд

Эта книга не просто руководство по Unix, а исследование его философии и культуры. Она не ориентирована на технические подробности, а на понимание "почему это следует сделать", а не "как". Автор, Эрик Стивен Реймонд, обращается к опыту ведущих разработчиков Unix, чтобы показать, как коллективная культура и традиции влияют на создание эффективных и устойчивых программ. Книга разделена на четыре части: Контекст, Проектирование, Реализация и Сообщество. Каждый раздел раскрывает различные аспекты Unix-культуры, от истории и философии до практических рекомендаций для программистов. Книга подходит для тех, кто хочет понять не только "как", но и "почему" Unix-программирование так эффективно. Понимание принципов проектирования, заложенных в Unix, поможет вам создавать более качественные и гибкие программы.

Программист-прагматик. Путь от подмастерья к мастеру

Эндрю Хант, Дэвид Томас

Книга "Программист-прагматик. Путь от подмастерья к мастеру" глубоко исследует процесс разработки программного обеспечения, абстрагируясь от технических тонкостей. Она фокусируется на ключевых аспектах, таких как требования к программе, ее работоспособность и поддержка. Авторы, эксперты в области программирования (А. Алексашин, Дэвид Томас, Эндрю Хант), делятся своим опытом, предлагая практические советы по преодолению трудностей и созданию программ, которые радуют пользователей. Книга охватывает темы личной ответственности, карьерного роста, архитектурных методик, гибкости и повторного использования кода. Научитесь бороться с недостатками ПО, избегать ловушек дублирования знаний, создавать адаптивные программы, избегать программирования на совпадениях, защищать код контрактами, утверждениями и исключениями, собирать реальные требования, осуществлять эффективное тестирование и формировать команды программистов-прагматиков.