Должен ли я стать опытным с библиотеками STL перед изучением альтернатив BOOST? - PullRequest
24 голосов
/ 14 февраля 2009

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

Или вам стоит погрузиться прямо в BOOST во время изучения C ++?

Ответы [ 9 ]

39 голосов
/ 14 февраля 2009

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

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

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

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

10 голосов
/ 14 февраля 2009

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

5 голосов
/ 14 февраля 2009

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

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

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

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

РЕДАКТИРОВАТЬ: забыл, что у меня была другая мысль - взглянуть на предстоящий стандарт C ++ 0x тоже. Он включает в себя множество функций, которые возникли в Boost. То есть студенты, начинающие изучать C ++ через несколько лет, с самого начала будут работать с этими концепциями - вы могли бы сделать это и сегодня ...

4 голосов
/ 14 февраля 2009

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

2 голосов
/ 14 февраля 2009

Я бы сначала пошел изучать STL.

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

Мне нравится универсальное программирование Мэтта Остерна и STL , который вы можете получить дешево из вторых рук .

1 голос
/ 14 февраля 2009

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

1 голос
/ 14 февраля 2009

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

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

1 голос
/ 14 февраля 2009

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

1 голос
/ 14 февраля 2009

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

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

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

...