В чем разница между стандартной библиотекой STL и C ++?

Кто-то принес эту статью в мою внимание, что утверждает, что (я перефразирую) термин STL неправильно используется для обозначения всей стандартной библиотеки C ++, а не частей, взятых из SGI STL.

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

Части стандартной библиотеки C ++ были основаны на частях STL, и именно эти части многие люди (включая нескольких авторов и печально известный ошибочный сайт cplusplus.com) до сих пор называют STL. Однако это неточно; действительно, стандарт C ++ никогда не упоминает STL, и между ними есть различия в содержании.

(...) STL редко используется для обозначения битов stdlib, которые основаны на SGI STL. Люди думают, что это вся стандартная библиотека. Его ставят в резюме. И это заблуждение.

Я почти ничего не знаю об истории C ++, поэтому не могу судить о правильности статьи. Следует ли мне воздержаться от использования термина STL? Или это единичное мнение?


person Pieter    schedule 05.03.2011    source источник
comment
соответствующее обсуждение   -  person fredoverflow    schedule 05.03.2011
comment
Людям нужны хорошие имена, чтобы описывать вещи. Гений Степанова изменил наши программы. Такое название, как стандартное библиотечное программирование, совершенно бесполезно для описания этого. Назовите это stl-программированием, и все поймут, что вы имеете в виду. Споры об этом упускают из виду главное: нам нужно хорошее имя.   -  person Hans Passant    schedule 05.03.2011
comment
@Hans: Нет, вы упустили суть: все знают, что вы имеете в виду неправду.   -  person Lightness Races in Orbit    schedule 07.03.2011
comment
Понятия не имею, что вы имеете в виду.   -  person Hans Passant    schedule 07.03.2011
comment
@Hans: Итак, прочтите статью и все ответы ниже. Я не понимаю, что сбивает с толку в том, что нет, ты ошибаешься, не все понимают, что ты имеешь в виду.   -  person Lightness Races in Orbit    schedule 08.03.2011
comment
@Hans: Да, программирование на STL - хороший тег для кода, использующего STL. Однако это очень плохой тег для кода, использующего потоки ввода-вывода. И STL, и потоки являются частью стандартной библиотеки, которая включает в себя разные концепции для разных задач. Конечно, эти задачи тоже должны быть помечены по-другому.   -  person sbi    schedule 10.03.2011
comment
Здесь прекрасный пример того, кто использует STL для ссылки на вся стандартная библиотека C ++. Меня по-прежнему сбивает с толку то, что так много людей слепо клянутся, что никто никогда этого не делает, хотя это видно почти каждый день.   -  person Lightness Races in Orbit    schedule 13.04.2011
comment
2747 результатов для потоков stl в Stack Overflow.   -  person Lightness Races in Orbit    schedule 19.04.2011
comment
Для большинства намерений и целей стандартная библиотека STL == C ++, но есть некоторые отличия stackoverflow.com/questions/5719842/   -  person Lightness Races in Orbit    schedule 19.04.2011
comment
STL изначально не разрабатывался в SGI, он был разработан Степановым в Hewlett Packard и был официально принят в стандарт C ++ по крайней мере за год до того, как SGI выпустил их реализацию. Степанов активно работал с членами Стандартного комитета (особенно с Бьярном Страуструпом) над его включением в стандарт C++, а сам Степанов назвал включение библиотеки в Стандартную библиотеку STL. Таким образом, термин STL всегда ассоциировался с его включением в Стандартную библиотеку, даже его автором и теми, кто помог ему разработать предложение.   -  person Galik    schedule 21.05.2017
comment
Вероятно, поэтому каждый крупный C++ автор продолжает называть эти части Стандартной библиотеки STL, ссылаясь на контейнеры и алгоритмы. Этот термин никогда не использовался для обозначения Стандартной библиотеки в целом в каком-либо авторитетном тексте.   -  person Galik    schedule 21.05.2017
comment
Первоначальный автор STL называет его частью стандартной черновой библиотеки C ++ в этой статье с сайта 1995 stepanovpapers.com/ BYTE_com.htm Стандартная библиотека шаблонов - это структура структур данных (называемых контейнерами в STL) и алгоритмов, принятых как часть проекта стандарта C ++. Эталонная реализация STL стала общественным достоянием Hewlett-Packard (ее можно загрузить с сайта butler.hpl.hp.com), и все большее число коммерческих поставщиков в настоящее время поставляют STL.   -  person Galik    schedule 21.05.2017
comment
@Galik Я читал эту статью на русском языке, и, поскольку я русский, я должен отметить, что русское слово, относящееся к английскому стандарту, имеет корень сохранения, но имеет немного более широкое значение в разговорной речи, чем английский термин. Это не обязательно означает, что это установлено стандартным документом, стандарта тогда еще не было. Это только означает, что его следует использовать повсеместно. Есть люди, которые говорят, что STL был написан всего за несколько дней до выхода стандарта, что неверно. Написан Степановым за годы работы в HP, датой создания является дата публикации.   -  person Swift - Friday Pie    schedule 07.02.2019
comment
@ Swift-FridayPie Эта статья была написана после того, как STL был официально принят в стандарт комитетом по стандартам. Стандарт в то время все еще находился в стадии проекта, и Степанов работал с членами комитета по стандартам, в основном Страуструпом, над деталями библиотеки для ее включения в стандарт. В статье он буквально говорит, что это принято как часть проекта стандарта C ++.   -  person Galik    schedule 07.02.2019


Ответы (7)


"STL" был написан Александром Степановым задолго до стандартизации C ++. C ++ существовал до 80-х годов, но то, что мы сейчас называем "C ++", является языком стандартизирован в ISO / IEC 14882: 2014 (и более ранних версиях, таких как ISO / IEC 14882: 2011).

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

На протяжении многих лет многие люди, в том числе известные авторы книг, и различные веб-сайты продолжали называть Стандартную библиотеку C ++ «STL», несмотря на то, что эти две сущности разделены и есть некоторые различия. Эти различия еще более заметны в новом стандарте C ++, который включает в себя различные функции и значительно изменяет некоторые классы.

Исходный STL теперь часто называют «реализацией стандартной библиотеки шаблонов C ++» (скорее наоборот, к реальной истории!), Точно так же, как ваша Microsoft Visual Studio или GCC поставляет реализацию стандартной библиотеки C ++. Но «Стандартная библиотека шаблонов» и «Стандартная библиотека» - это не одно и то же.

Битва заключается в том, должна ли текущая Стандартная библиотека называться «STL» полностью или частично, и / или имеет ли значение то, как она называется.

Для "STL"

Существует школа мысли, которая утверждает, что теперь все знают, что «STL» означает стандартную библиотеку, точно так же, как все теперь знают, что «C ++» является стандартизованным языком ISO.

Сюда также входят те, кто считает, что на самом деле это не имеет значения, если все стороны понимают, о чем идет речь.

Этот термин стал еще более распространенным благодаря природе зверя, многие из которых активно используют функцию C ++, известную как «шаблоны».

Для "стандартной библиотеки C ++" (или stdlib)

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

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

Кроме того, существуют некоторые библиотеки, подобные STL, которые фактически являются реализациями исходного STL, а не стандартной библиотеки C ++. До недавнего времени одним из них был STLPort (и даже там путаницы изобилуют!).

Кроме того, стандарт C ++ нигде не содержит текста «STL», и некоторые люди обычно используют фразы вроде «STL включен в стандартную библиотеку C ++», что явно неверно.

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

Заключение

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

Обновление от 13 апреля 2011 г.

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

person Lightness Races in Orbit    schedule 05.03.2011
comment
Если есть какие-либо противоположные точки зрения, которые я не упомянул, прокомментируйте, и я буду более чем счастлив добавить их к ответу (даже если я не согласен с ними). - person Lightness Races in Orbit; 05.03.2011
comment
Библиотека S tandard T emplate L была создана не только St epanov и L э-э, но они также работали в то время в лаборатории S программного обеспечения T echnology L. - person Kragen Javier Sitaker; 15.03.2011
comment
Если бы кто-то сегодня спрашивал, в каком заголовке std::iota, потому что он не мог заставить его работать. Это нестандартное расширение SGI, которое они называют стандартным, когда им это удобно. потому что это STL, а все знают, что STL является частью стандартной библиотеки C ++, верно? И он был введен в C ++ 0x, но недоступен в C ++ 03. Grrr. - person Lightness Races in Orbit; 24.06.2011
comment
А MS STL поддерживается S tephan T. L avavej, он же STL. - person Mihaela; 11.03.2012
comment
Бьярн Страуструп конкретно отличает STL от других частей стандартной библиотеки в каноне, The C ++ Programming Language 4th Edition. - person codenheim; 16.08.2014
comment
Интересно, что, как заметил сам Степанов, самая первая версия STL была написана на Scheme (диалект Lisp), следующая была на Ada iirc, а на C ++ это фактически версия 3. - person Peter K; 18.05.2015
comment
Станете ли вы в таком случае сторонником сжигания тега stl и создания такого тега, как cppstdlib или чего-то подобного? - person Kuba hasn't forgotten Monica; 24.07.2015
comment
@KubaOber: В моей идеальной гипотетической реальности? Да, конечно. Подойдет stdlib. В реальном мире? Нет, наверное, нет. Больше проблем, чем пользы, пока это заблуждение настолько широко распространено. Или, может быть, это поможет ...? Хм, не знаю. Я знаю, что не получу в этом особой поддержки, да ладно. :) - person Lightness Races in Orbit; 24.07.2015
comment
@mrjoltcola 'Бьярн Страуструп специально отличает STL от других частей Стандартной библиотеки в каноне' - Страуструп где-то был профессором, и я предполагаю, что в этой профессии есть обязанность признавать использование чужих работ, т.е. включение STL в стандарт C ++. Хотя он якобы удалил половину контента, чтобы оно было принято консервативным комитетом по стандартам. - person tinlyx; 07.01.2016
comment
@LightnessRacesinOrbit Мне очень нравится твой ответ! - person Curious; 04.02.2016
comment
Каждый известный автор и каждый важный текст на C++ ссылается только на части контейнеров и алгоритмов стандартной библиотеки как STL, что придает правильное использование. Причина в том, что STL и его философия революционны и должны рассматриваться как единое целое для целей компьютерных наук и образования. Другие части стандартной библиотеки не называются "STL", и, конечно же, нашей задачей должно быть исправление людей, а не добавление путаницы? - person Galik; 04.07.2016
comment
@Galik: Я пытаюсь исправить людей. Смешивание терминов - вот что сбивает людей с толку. - person Lightness Races in Orbit; 04.07.2016
comment
@LightnessRacesinOrbit Я потратил некоторое время на поиск книги, в которой термин STL использовался для обозначения чего-то другого, кроме контейнеров, итераторов и алгоритмов. стандартной библиотеки, и мне не удалось его найти. Все мы знаем, что Страуструп, Майер, Саттер и другие используют этот термин, как я описал. Мне еще предстоит найти автора из списка рекомендованных книг, который не т. - person Galik; 04.07.2016
comment
@LightnessRacesinOrbit Я думаю, вы противоречите себе в своем ответе. Сначала вы говорите "there is a school of thought that says that everybody knows now that "STL" means the standard library". А потом "The author of that article has numerous times encountered people who believe that the entire C++ Standard Library is the STL, including features that were never part of the STL itself". Это то же самое. Я хочу сказать, что происхождение термина STL имеет только историческое значение. Людям, изучающим C ++ сейчас, не нужно знать, что тогда было за STL. Теперь это просто псевдоним для stdlib. - person Alex; 28.08.2016
comment
@Alex: Как это противоречие? Я знаю, что это то же самое, и никогда не утверждал обратного. В своем ответе я просто упомянул одну и ту же группу людей в разных местах. - person Lightness Races in Orbit; 28.08.2016
comment
Я вижу противоречие в том, что если мы упростим ваши утверждения, мы получим следующее: некоторые люди верят, что X истинно. Я не согласен, потому что я встречал много людей, которые верят, что X истинен, и затем следуют некоторые аргументы. - person Alex; 28.08.2016
comment
Хотя вы, наверное, правы, что путаница все еще есть. Лучше выразить то, что я хотел сказать, не было бы путаницы, если бы мы просто согласились называть стандартную библиотеку STL :) - person Alex; 28.08.2016
comment
@Alex: Действительно, если бы каждый разработчик C ++ сел и пришел к соглашению, разногласий больше не было бы. Но этого не произошло и, скорее всего, никогда не будет :) - person Lightness Races in Orbit; 28.08.2016
comment
Проблема усугубляется тем, что стандартная библиотека C ++ представляет собой совокупность модифицированных полных и / или частичных версий других библиотек и / или уникальных библиотек, основанных на этих вышеупомянутых других библиотеках, таких как стандартная библиотека C, STL и Boost. Может быть полезно иметь термин для обозначения каждой из этих групп в стандартной библиотеке, но главная проблема заключается в том, что на самом деле никто не объясняет термины и их происхождение. - person Justin Time - Reinstate Monica; 08.02.2017
comment
Из названия очевидно, что заголовки совместимости C содержат интерфейсы для компонента стандартной библиотеки C стандартной библиотеки C ++, а часть из Boost, похоже, не имеет собственного имени подгруппы (насколько мне известно, в минимум), но в большинстве учебных пособий и на других сайтах не объясняется, что STL - это именно часть стандартной библиотеки C ++, основанная на исходном STL, что приводит к большой путанице при использовании термина STL (поскольку без объяснения причин , это просто сокращение от STandard Library). - person Justin Time - Reinstate Monica; 08.02.2017
comment
У вас есть эта учетная запись stackoverflow.com/users/560648/lightness-races-in-orbit а также stackoverflow.com/users/18771/tomalak? Один из них неактивен? - person Johannes Schaub - litb; 01.03.2018
comment
@ JohannesSchaub-litb: Нет, другой Томалак - немецкий джентльмен, не имеющий отношения ко мне. Это просто совпадение. Почему вы спрашиваете? - person Lightness Races in Orbit; 01.03.2018
comment
@LightnessRacesinOrbit ха-ха, я думал, что знаю только один томалак. Но теперь я понимаю, что на самом деле это два человека. Спасибо :) - person Johannes Schaub - litb; 01.03.2018
comment
@ JohannesSchaub-litb: Да, к сожалению, фраза, что есть только один томалак, на самом деле не соответствует действительности - person Lightness Races in Orbit; 01.03.2018
comment
Я неправильно читаю здесь? Этот ответ, кажется, говорит о том, что STL буквально означает только исходную реализацию SGI шаблонов, итераторов, алгоритмов C ++ и т. Д. Однако вот статья Stroustroup и др., В которой используется термин - хотя, к сожалению, это не определяет. Я предполагаю, что они означают некоторое подмножество любой итерации стандартной библиотеки C ++ ... open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3351.pdf - person cp.engr; 06.09.2018
comment
@ cp.engr Вы, должно быть, неправильно читаете, потому что большая часть этого ответа рассказывает, как существуют разные мнения / подходы / точки зрения по теме. Вы нашли одного из них. Не уверен, что еще сказать об этом на самом деле - person Lightness Races in Orbit; 06.09.2018
comment
@LightnessRacesinOrbit, в ответе говорится, что некоторые люди обычно используют такие фразы, как «STL включен в стандартную библиотеку C ++», что совершенно неверно. И все же создатели языка, похоже, используют его именно таким образом. Я согласен с тем, что существует несоответствие, и что оно четко не определено (AFAIK), но мне кажется, что единственный способ исправить ситуацию - это обострить проблему и заставить разработчиков языка / библиотеки сделать заявление по этому поводу. . - person cp.engr; 06.09.2018
comment
@ cp.engr Да, создатели языка часто виноваты не меньше, чем кто-либо другой. Это одна из причин, по которой его эскалация будет бесполезной: этот аргумент забит до смерти, и не стоит продолжать бороться с ним. - person Lightness Races in Orbit; 06.09.2018
comment
@ Marc.2377 Sadface :( - person Lightness Races in Orbit; 28.10.2019

Нет одного действительно правильного ответа. Александр Степанов разработал библиотеку, которую он назвал STL (в то время работал на HP). Затем эта библиотека была предложена для включения в стандарт C ++.

Это в основном "раздвоенное" развитие. Комитет включил одни части, другие полностью отклонил, а некоторые переработал (с участием Александра). Позднее разработка исходной библиотеки была перенесена в Silicon Graphics, но продолжалась отдельно от стандартной библиотеки C ++.

После того, как эти части были добавлены в стандартную библиотеку, некоторые другие части стандартной библиотеки были изменены, чтобы лучше соответствовать тому, что было добавлено (например, begin, end, rbegin и rend были добавлены в std::string, чтобы его можно было использовать как контейнер). Примерно в то же время большая часть библиотеки (даже части, которые были полностью не связаны) были преобразованы в шаблоны для размещения различных типов (например, стандартные потоки).

Некоторые люди также используют STL как сокращенную форму «стандартной библиотеки».

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

К сожалению, путаница, вероятно, не утихнет. Намного удобнее ссылаться на «STL», чем на что-то вроде «контейнеры, итераторы и алгоритмы в стандартной библиотеке C ++, но не включая std::string, хотя он может действовать как контейнер». Несмотря на то, что «стандартная библиотека C ++» не такая длинная и неуклюжая, «STL» все же намного короче и проще. До тех пор, пока кто-то не изобретет более точные (при необходимости), и столь же удобные термины или если только они не будут изобретены, будет по-прежнему использоваться "STL", и возникнет путаница.

person Jerry Coffin    schedule 05.03.2011
comment
@Tomalak Geret'kal: Это работает для всей стандартной библиотеки, но даже там вы сталкиваетесь с проблемой: когда я говорю (например): X находится в stdlib, я имею в виду то, что стандарт требует, чтобы все соответствующие компиляторы Supply, или что конкретный компилятор может предоставить? - person Jerry Coffin; 05.03.2011
comment
@ Джерри: Первый; это то, что означает std. :) - person Lightness Races in Orbit; 06.03.2011
comment
@Tomalak Geret'kal: Дело не в том, чтобы спросить, как вы бы его использовали, а в том, чтобы указать на тот факт, что разные люди используют этот термин по-разному (и одна из точек добавления пространств имен заключалась в том, чтобы разрешить поставщиков для безопасного определения дополнительных имен ...) - person Jerry Coffin; 06.03.2011
comment
@Jerry: Не уверен, где в него входят пространства имен. Совместимые реализации ничего не добавляют в пространство имен std. Я говорил о std в stdlib, что означает стандарт. Думаю, довольно ясно, что это значит! - person Lightness Races in Orbit; 07.03.2011
comment
@Tomalak Geret'kal: Конечно, реализация позволяла добавлять вещи в std (в §17 перечислены несколько классов зарезервированных идентификаторов). Однако не совсем ясно, что означает стандарт - Microsoft (недавно) работала над выяснением того, какие части стандартной библиотеки входят в стандарт, но gcc обычно делает намного меньше, чтобы различать обязательные стандартом и предоставляемые в нашей библиотеке. - person Jerry Coffin; 07.03.2011
comment
@Jerry: Я действительно не думаю, что ожидать, что кто-то прочитает стандарт прилагательных, будет натяжкой, поскольку это стандарт. Между тем, в 17.4.3.1/1 совершенно ясно, что добавление вещей в пространство имен std - это UB, за исключением некоторых конкретных именованных случаев: эти случаи добавления названы в стандарте и, таким образом, все еще полностью совместимы; стандарт будет по-прежнему применяться. - person Lightness Races in Orbit; 07.03.2011
comment
История SGI и HP здесь обратная. Степанов работал в HP до того, как перешел в SGI. - person Kragen Javier Sitaker; 15.03.2011
comment
Я просто перечитал здесь комментарии и подумал, что стоит добавить еще один (по общему признанию, незначительный) момент: я думаю, что это немного натянуто, чтобы ожидать, что стандарт всегда будет означать, что это входит в стандарт. В частности, многие программисты на C ++ использовали фразу «стандартная библиотека» задолго до того, как стал стандартом. Чтобы никто не подумал, что они имеют в виду библиотеку в стандарте C, я отмечу, что то же самое относилось к программистам на C задолго до того, как появился (даже черновик) стандарта C. - person Jerry Coffin; 18.12.2013

Термин «STL» или «Стандартная библиотека шаблонов» нигде не встречается в стандарте ISO 14882 C ++. Поэтому называть стандартную библиотеку C ++ STL неверно. Термин «Стандартная библиотека C ++» или «стандартная библиотека» - это то, что официально используется в ISO 14882:

Стандарт ISO 14882 C ++:

17 - Введение в библиотеку [lib.library]:

  1. В этом разделе описывается содержимое стандартной библиотеки C ++, как правильно сформированная программа на C ++ использует библиотеку и как соответствующая реализация может предоставлять сущности в библиотеке. .

...

STL - это библиотека, изначально разработанная Александром Степановым, независимая от стандарта C ++. Однако некоторые компоненты стандартной библиотеки C ++ включают компоненты STL, такие как vector, list, и алгоритмы, такие как copy и swap.

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

person In silico    schedule 05.03.2011
comment
+1. Хотя в STL не было пространства имен std (IIRC). - person Lightness Races in Orbit; 05.03.2011
comment
В то время большинство компиляторов C ++ не реализовывали пространства имен. На самом деле, я не знаю, были ли они даже в стандарте. - person Kragen Javier Sitaker; 15.03.2011
comment
@Kragen: Ну, стандарта не было. - person Lightness Races in Orbit; 20.09.2011
comment
Ой. Ну, были книги Страуструпа, но я полагаю, что это не совсем то же самое, не так ли? - person Kragen Javier Sitaker; 07.10.2011

Я недавно высказал тот же аргумент, но считаю, что можно допустить небольшую терпимость. Если Скотт Мейерс совершает ту же ошибку, вы в хорошей компании.

person Mark Ransom    schedule 05.03.2011
comment
@Tomalak и @Mark: На самом деле Скотт не знает, -1 от меня. Книга действительно о STL в смысле частей std lib, происходящих из библиотеки Степанова. Найдите время, чтобы просмотреть оглавление книг. Единственное, что я смог найти за пределами оригинального STL, это std::string, и он был оборудован как полноценный контейнер STL. - person sbi; 10.03.2011
comment
@sbi: Вы, очевидно, неверно истолковали мою позицию. Я бы не стал использовать STL так, как это делает Скотт. Прочтите, пожалуйста, мой ответ. - person Lightness Races in Orbit; 10.03.2011
comment
@Tomalak, я бы тоже не стал использовать STL таким образом, хотя я, наверное, был виноват в этом в прошлом. Я просто не думаю, что стоит перебивать людей. - person Mark Ransom; 10.03.2011
comment
Это я могу уважать. Я очень злобно отношусь к людям, которые вообще отказываются признавать потенциальную двусмысленность. :) - person Lightness Races in Orbit; 11.03.2011
comment
Вы также были бы в компании Бьярна Страуструпа - исх. например. stroustrup.com/DnE2005.pdf: STL (стандартная библиотека шаблонов; то есть контейнеры и структура алгоритмов стандартной библиотеки ISO C ++) - person Sander De Dycker; 11.08.2014

Из часто задаваемых вопросов по стандартной библиотеке C ++ GNU (libstdc ++):


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

Libstdc ++ - v3 включает большой объем кода из SGI STL (окончательное слияние было из выпуск 3.3). Код в libstdc ++ содержит множество исправлений и изменений по сравнению с исходным кодом SGI.

В частности, string не из SGI и не использует их класс веревки (хотя он включен как дополнительное расширение), ни valarray, ни некоторые другие. Такие классы, как vector<>, были от SGI, но были значительно изменены.

Дополнительную информацию об эволюции libstdc ++ можно найти на странице эволюция API и документацию по обратной совместимости.

FAQ для SGI's STL по-прежнему рекомендуется читать.


К вашему сведению, по состоянию на март 2018 года даже официальный веб-сайт STL www.sgi. com / tech / stl / больше нет.

person vstepaniuk    schedule 13.04.2018

Стандартная библиотека C ++ включает C ++ STL

Содержимое стандартной библиотеки C ++:

  1. Версия C ++ заголовочного файла языка C
  2. Заголовочный файл ввода-вывода C ++
  3. C ++ STL

Поэтому, пожалуйста, не путайте стандартную библиотеку C ++ с STL.

person Cristime    schedule 02.08.2020
comment
Хотя верно, что части STL были включены в стандартную библиотеку C ++ 98, неверно, что STL, IOStream и материалы C - единственные вещи в стандартной библиотеке. Даже стандартная библиотека C ++ 98. - person Nicol Bolas; 02.08.2020

Проще говоря: STL является частью стандартной библиотеки.

Стандартная библиотека C ++ сгруппирована в:

  1. Стандартная функциональная библиотека - Ввод / вывод, - Обработка строк и символов, - Математические, - Время, дата и локализация, - Динамическое размещение, - Разное, - Функции для широких символов

  2. Стандартная библиотека ООП и универсальных шаблонов - Стандартные классы ввода / вывода C ++ - Класс String - Числовые классы - Классы контейнеров STL - Алгоритмы STL - Объекты функций STL - Итераторы STL - Распределители STL - Библиотека локализации - Обработка исключений Классы - Разная библиотека поддержки

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

См. https://www.tutorialspoint.com/cplusplus/cpp_standard_library.htm

person Mohd Zaki Zakaria    schedule 12.09.2020