**Цель работы:**  
- Изучить способы определения шаблонов, принцип и механизм создания шаблонных классов и шаблонов функций
- Получить практические навыки работы с шаблонными классами.
  
**Задания:**  
1. Модифицируйте абстрактные типы данных, реализованные по заданию лабораторной работы №3, используя шаблоны определения класса и шаблоны определения функции.
2. Обязательно сделать шаблонным класс контейнер.
3. Шаблоны определения функции на свое усмотрение.
4. Проверьте работоспособность АТД на тестовом наборе данных.
  
**Контрольные вопросы:**  
1. Для чего используется ключевое слово **template**?
2. В чем заключаются особенности параметров по умолчанию для шаблонов?
3. Для чего используются шаблоны функций?
4. Назовите разновидности дружественных функций шаблонного класса.
5. Дайте определение специализации шаблона.