Прежде всего вы должны понимать, что в C ++ есть три разных «уровня» именованных сущностей: значения, типы и шаблоны. У значения есть тип, и объекты определенного типа могут принимать много значений. (Я использую термины «объект», «переменная» и «именованное значение» в качестве синонимов.) Затем существуют шаблоны - шаблоны не являются типами, а скорее, они создают типов при создании экземпляров. Шаблоны по сути являются инструментами генерации кода (поэтому сами шаблоны не могут быть «скомпилированы» в C ++).
Имея это в виду, вероятно, было бы правильно сказать, что библиотеки содержат несколько шаблонов контейнеров , и когда вы создаете один из них для какого-либо типа, вы получаете контейнер (класс ) , который описывает структуру данных, которая содержит элементы вашего типа.
По сути, вместо того, чтобы писать связанный список для целых чисел, один для чисел с плавающей запятой и другой для чисел без знака, вы понимаете, что все эти структуры данных выглядят формально одинаковыми, и поэтому вы создаете один list template , который затем можно создать для целых чисел, чисел с плавающей запятой и беззнаковых символов (и, возможно, намного больше!), и вы всегда получите соответствующий класс конкретного контейнера.
Я предполагаю, что оригинальное название «стандартная библиотека шаблонов» ссылается на тот факт, что это коллекция шаблонов , многие из которых были шаблонами контейнеров.