(Когда я говорю STL, я говорю о библиотеке шаблонов, которая вращается вокруг контейнеров, итераторов, алгоритмов и функторов.)
Этот вопрос пришел в голову после того, как я подумал, что std::string
в основном ведет себя как обычный контейнер с функциями begin
и end
(включая итератор), функцией size
и возможностью использовать все из них для обычных алгоритмов STL которые работают с контейнерами / диапазонами через их итераторы (например, transform
, sort
, find
и т. д.).
В то же время, однако, это не сам контейнер, поскольку он не вписывается в картину контейнеров, в которых хранятся произвольные данные. Кроме того, он работает с содержащимися данными в основном через функции-члены, такие как substr
, find_first_of
и т. Д., В то время как истинный контейнер этого не делает и позволяет алгоритмам обрабатывать это.
Кроме того, справочный сайт cplusplus и стандарт C ++ не перечисляют std::string
вместе с реальными контейнерами, но в отдельной категории.
Однако на сайте STI SGI , basic_string
(и, следовательно, string
typedef) упоминаются вместе с другим контейнером, а ссылочный сайт basic_string
заявляет, что он принадлежит категория "контейнеры".
Теперь мой вопрос: действительно ли string
является частью STL или это отдельная библиотека?
И если теперь он принадлежит STL, отличается ли он от оригинального STL, разработанного Степановым?