что такое связь между классом контейнера и шаблоном в C ++ - PullRequest
0 голосов
/ 27 февраля 2012

Каково отношение между классом контейнера и шаблоном в C ++, Может ли кто-нибудь дать мне точный ответ с примером, пожалуйста, спасибо

Ответы [ 4 ]

0 голосов
/ 27 февраля 2012

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

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

По сути, вместо того, чтобы писать связанный список для целых чисел, один для чисел с плавающей запятой и другой для чисел без знака, вы понимаете, что все эти структуры данных выглядят формально одинаковыми, и поэтому вы создаете один list template , который затем можно создать для целых чисел, чисел с плавающей запятой и беззнаковых символов (и, возможно, намного больше!), и вы всегда получите соответствующий класс конкретного контейнера.

Я предполагаю, что оригинальное название «стандартная библиотека шаблонов» ссылается на тот факт, что это коллекция шаблонов , многие из которых были шаблонами контейнеров.

0 голосов
/ 27 февраля 2012

Некоторые классы контейнеров являются шаблонами (особенно в std), а некоторые шаблоны являются контейнерами.Например, вы можете гуглить для std контейнеров.

0 голосов
/ 27 февраля 2012

Шаблон в C ++ - это все, чей тип может быть параметризован.Шаблонами могут быть не только классы, но и функции.Например, функция min в STL является функцией шаблона, но это не класс контейнера:

template <class T> const T& min ( const T& a, const T& b );

С другой стороны, класс контейнера обычно описывает контейнер, который не является шаблонным.Я не думаю, что стандартная библиотека C ++ включает какие-либо из них.

0 голосов
/ 27 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...