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

Должны ли программисты использовать STL или писать свой собственный код?

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

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

4b9b3361

Ответ 1

Вы должны использовать STL, потому что он хорошо протестирован и оптимизирован.

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

Ответ 2

В то время как Библиотека стандартных шаблонов удобна, когда речь заходит о выполнении задач, как вы упомянули, таких как "Поиск", "Замена", "Использование связанных списков", она не должна заменять знания о том, что происходит в внутри библиотеки.

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

В принципе - вам не нужно изобретать колесо, но, по крайней мере, знать, что заставляет колеса эффективно поворачиваться.

Ответ 3

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

Ответ 4

Рабочие знания о базовых структурах данных, методах и приложениях инструментов, предоставляемых STL, сделают вас намного лучшим программистом. Знать, когда использовать какой тип контейнера или какой алгоритм так же важен, как и правильная реализация. Иногда самый простой способ понять некоторые из более сложных понятий - реализовать их самостоятельно в контексте структуры структур данных и алгоритмов.

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

Ответ 5

Просто добавьте свой ответ (из комментария выше):

Да, вы должны подумать о реализации, например. последовательность, связанный список, используя ваш собственный код.

Это то, чему они учат на курсах Comp Sci, и это не без оснований. Но, если вы хотите быстро работать, просто используйте STL.

Я просто думаю, что люди должны понимать, как работают инструменты.

Ответ 6

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

Ответ 7

Я стесняюсь писать, так как я не писал С++ через 5 лет. Но на ум пришло несколько вещей, которые еще не обсуждались.

Если реализация плохо подходит для того, что вам нужно, не используйте ее, если вы можете писать и тестировать свои собственные, а не использовать библиотеку. Я недавно столкнулся с этим на Java, где мне нужен быстрый битсет. Подробности:: В JVM (BitSet и BigInteger) есть два соответствующих класса. BitSet не поддерживает инициализацию, отличную от установки по одному бит за раз; У BigInteger есть несущественный признак, который путают вещи и неизменен, что дорого в моем случае. В конце концов, я закончил писать свои тесты с помощью тестов. Он подходит лучше, быстрее, и я могу делать все, что захочу.

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

Ответ 8

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

По-прежнему хорошее учебное упражнение для написания собственного класса контейнера и алгоритмов.

Ответ 9

Используйте STL, если у вас нет веской причины, например. скорость или правильность, а не. Определенно знаю, как писать основные структуры данных самостоятельно.

Ответ 10

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

Ответ 11

Очень умные люди писали STL. Тогда более умные люди использовали его, протестировали и усовершенствовали. Вы думаете, что вы сделаете лучше? Редко. Это отличный инструмент; вы должны использовать его, когда это возможно!

Ответ 12

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

Другими словами, используйте свой код, только если ваш код может бить другие коды!