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

Является ли std::string частью STL?

(Когда я говорю STL, я говорю о библиотеке шаблонов, которая вращается вокруг контейнеров, итераторов, алгоритмов и функторов.)
Этот вопрос напомнил, думая, что std::string в основном ведет себя как обычный контейнер с функциями begin и end (включая итератор), функцией size и возможностью использовать все те, которые используются для обычных алгоритмов STL которые работают на контейнерах/проходят через их итераторы (например, transform, sort, find и т.д.).

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

Кроме того, справочный сайт cplusplus и стандарт С++ не отображают std::string вместе с реальными контейнерами, но в отдельной категории.
Однако на сайте SGI STL basic_string (и, следовательно, string typedef) упоминаются вместе с другим контейнером, а basic_string указывает, что он относится к категории "контейнеры".

Теперь мой вопрос: действительно ли string часть STL или это отдельная библиотека?
И если теперь это относится к STL, отличается ли он от оригинального STL, разработанного Степановым?

4b9b3361

Ответ 1

Нет, не совсем. И да, вроде.

Существуют различные определения "STL" , в том числе:

  • Фактическая HP/SGI STL, исходная библиотека, на которой основана стандартная библиотека С++. Они включали контейнеры, итераторы и алгоритмы. Строки не были частью этого.

  • Части стандартной библиотеки С++, основанные на библиотеке SGI STL: контейнеры, итераторы и алгоритмы. Все еще нет строк.

  • Вся стандартная библиотека С++. Это определение абсолютно не основывается на логике или реальности, хотя, если следовать, std::string будет включен.

Обратите внимание, что фактический STL развился с тех пор, как С++ был стандартизирован (около 13 лет назад, помните), и они были в обратном порядке - приняли некоторые вещи, которые вошли в стандарт, например, строки. Это не означает, что они изначально были там в 1998 году... но они теперь существуют по причинам "совместимости".


Резюме

STL - это контейнеры, алгоритмы и итераторы.

Строки и потоки были приняты для С++ 98, а затем назад - для современного SGI STL.

Будут ли строки "частью STL" или нет, зависит от того, следуете ли вы логике и причине или называете стандартную библиотеку "STL".

Надеюсь, что это поможет.

Ответ 2

На это нет реального ответа. С одной стороны, std::string был разработан полностью независимо от других контейнеров. С другой стороны, он достаточно добавил для удовлетворения всех требований контейнера с произвольным доступом. Если вы решите классифицировать это как часть "STL" или не полностью зависит от вас - в конце концов, это просто указывает на то, что "STL" не хватает единого согласованного определения и шансов на него внезапно получение четкого значения является отдаленным (чтобы это было хорошо).

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

Ответ 3

Это действительно часть STL. И std::string - это просто basic_string typedef. Это контейнер, специализированный (не в С++ "специализация", означающий:)) для хранения данных со строковой семантикой. Впрочем, о Степанове не знаю. Стоит упомянуть, что STL является "стандартной библиотекой шаблонов", а не только дочерней частью контейнера. Это включает в себя алгоритмы, потоки и некоторые черты.