(Когда я говорю 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, разработанного Степановым?