Отображение типов STL в заголовках в некоторых случаях может привести к неприятным и неприятным временам компоновки. В больших проектах это может быть достаточной причиной, чтобы «спрятать» их за проприетарным API.
Реализация STL различается на каждой платформе, поэтому раскрытие STL в библиотеке будет иметь риск, например, если вы выставите std :: map в своей библиотеке, поскольку вы можете не экспортировать std :: map из вашей библиотеки, ваша библиотека будет вынуждена использовать реализацию std :: map от пользователей вашей библиотеки (той, которая загружает вашу библиотеку), это вызовет некоторую несовместимость, такую как другая версия реализации STL, другой STL класс распределителя и некоторые проблемы, специфичные для платформы.
Одна из причин может заключаться в том, что контейнеры STL не предназначены для использования в качестве базовых классов - Проблемы проектирования STL Википедия
C++ как язык существовал много лет до стандартизации STL и еще несколько лет до последовательной реализации STL во всех компиляторах. Библиотеки, изначально написанные в это время, возможно, не хотели полагаться на STL, чтобы быть более переносимыми.
Еще одна причина, связанная с переносимостью, - встроенное использование. Qt, например, повторно реализует большую часть STL, потому что приложения Qt иногда нацелены на встроенные платформы (например, смартфоны Nokia), которые могут не иметь доступной реализации STL.