Подтвердить что ты не робот

Должен ли я учиться библиотекам STL перед изучением альтернатив BOOST?

Имеет ли смысл ограничивать себя библиотеками STL при изучении С++, а затем заниматься повышением и его добавлением после того, как вы стали достаточно опытными с помощью ванильного С++?

Или вы должны погрузиться прямо в BOOST во время изучения С++?

4b9b3361

Ответ 1

У STL есть некоторые основные понятия. Boost развивается и расширяется. Если вы их поймете, то вам может понадобиться двигаться прямо к Boost. Если нет, я бы начал с STL.

  • Различие между различными типами контейнеров (последовательности, такие как vector, list и deque, и ассоциации типа map, set и их разновидности multi* и unordered_*). Иногда вы можете поменять один на другой - иногда вы не можете. Знайте свои сильные стороны и их пределы.
  • Роль итераторов и то, как они обеспечивают мост между контейнерами и алгоритмами. (Этот, который я нахожу, я использую снова и снова).
  • Почему существуют стандартные алгоритмы: они часто являются небольшим количеством кода, поэтому не может быть очевидным, почему они существуют. Узнайте, с какими контейнерами они работают, и как их специализировать для конкретных случаев (например, посмотрите, как общий copy отличается от copy, специализированным для const char *).
  • Как и когда используются классы признаков.
  • Как использовать связующие (bind1st, ptr_fun и mem_fun): синтаксис может скрывать их полезность.
  • Как использовать string - и когда не использовать его. (Все классы строк имеют компромиссы: изучение плюсов и минусов стандартного - это образовательный).
  • Разница между потоками и streambufs: как использовать первый для форматирования ввода-вывода (попробуйте прочитать строку из потока: это не так прямолинейно, как должно быть), а последнее - делать низкоуровневые быстрые I/вывода.

Принципы, используемые для проектирования STL, основаны на библиотеках Boost и расширены. Если вы их получите, Boost управляем. Если вы этого не сделаете, и Boost окажется трудно следовать, вы можете вернуться к STL, чтобы получить ваши рекомендации.

(В общем, Boost действительно подталкивает границы языка.Если вы решите, что хотите действительно продвигать свои собственные знания С++ и проверить, действительно ли вы знаете, что думаете, что знаете, тогда это может стать интересной задачей. вы использовали С++ более десятка лет, научили других людей, как использовать его, с тех пор приобрели навыки во многих других языках высокого уровня, и Boost все еще меня удивляет. Это очень полезно, но его нетривиально).

Ответ 2

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

Ответ 3

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

Лучший способ узнать что-то - использовать отличный код, а затем пойти и посмотреть, как он был написан. Это хорошо сработало для меня с Boost. Прочтите учебник по шаблонам, и вы вдохновлены новой силой, которую вы обнаружили в течение часа. Затем прочитайте заголовок Boost, который вы использовали немного, и вы будете вдохновлены в течение нескольких недель.

Конечно, не ждите, чтобы сразу понять эти внутренние компоненты - сначала я просто использовал библиотеки, не понимая, как вы построите что-либо из этого, и это прекрасно. Но в какой-то момент вы понимаете, что хотите написать что-то с похожим дизайном, а затем вы посмотрите.

Если вы сделали бы противоположное и ограничили бы себя "С++ как более безопасный C", тогда вы не подверглись бы воздействию всех этих мощных вещей, поэтому вы не были бы так же склонны смотреть и понимать их, и поэтому вы должны писать довольно примитивный код и учиться медленнее.

EDIT: забыл, что у меня была другая мысль - взгляните на предстоящий стандарт С++ 0x. Он включает в себя множество функций, созданных в Boost. То есть, студенты, которые начнут изучать С++ через несколько лет, будут работать с этими концепциями с самого начала - вы тоже могли бы это сделать и сегодня...

Ответ 4

В конечном счете, вы должны изучить оба. Но STL можно изучать изолированно, тогда как повышение не будет иметь большого смысла, пока вы не поймете STL, поскольку это то, что Boost смоделировано и предназначено для расширения. Поэтому научитесь использовать STL как часть обучения С++. И тогда вы можете перейти к Boost, который в настоящее время является более "второй стандартной библиотекой".

Ответ 5

Я бы сначала изучил STL.

Как только вы пройдете основы с С++, узнаете, как использовать части STL, а затем как это работает, лучше, чем решать Boost. Библиотеки Boost имеют тенденцию выталкивать края С++, особенно в комбинации высокотемпературных функций.

Мне нравится Generic Programming от Matt Austern и STL, которые вы можете дешево выбрать подержанный.

Ответ 6

Все зависит от того, сможете ли вы использовать Boost во всей своей работе. Я не сомневаюсь, что там будут рабочие места, которые запретят его использование (как бы глупо это ни казалось).

Но, если вы думаете, что сможете использовать его в любом месте, тогда непременно сосредоточьтесь в основном на нем.

Если функции, предоставляемые STL, но не Boost, сосредоточиться на изучении этих бит STL.

Ответ 7

Изучите программирование и используйте наиболее подходящие инструменты. Если вы программируете что-то, что требует большого количества парсинга, тогда вы, возможно, научитесь поддерживать дух будильника, но прежде чем вы это догадаетесь, вы также научитесь чему-то из std::string и std:: fstream. следующее приложение, которое вы пишете, возможно, понадобится std::vectors и boost:: аккумуляторам.

Просто помните, что форсирование огромно, вы будете хорошим программистом, прежде чем использовать четверть этого (лично я не ожидаю когда-либо использовать или изучать большинство импульсов, потому что мне это не нужно...).

Ответ 8

Сначала узнайте STL. Если вы научитесь С++ с Boost с самого начала, вам будет тяжело работать на работе, где Boost не используется (из-за причин лицензии и т.д.). Сначала знайте стандарт языка, а затем расширьте его с помощью Boost позже, если вам это нужно для определенных вещей.

Ответ 9

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