Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции C++.doc
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
1.44 Mб
Скачать

9.5 Пример с двумя типами-шаблонами

Класс-шаблон может иметь несколько типов в качестве параметров шаблона. Достаточно объявить все типы-шаблоны в виде списка, разделенного запятыми. Например, в следующем коротком примере создается класс, использующий два типа-шаблона:

#include <iostream.h>

template <class Type1, class Type2> class myclass

{

Type1 i;

Type2 j;

public:

myclass(Type1 a, Type2 b) { i = a; j = b; }

void show() { cout << i << “ “ << j << “\n”; }

};

int main()

{

myclass<int, double> o1(10, 0.23);

myclass<char, char*> o2('X', "This is a test");

o1.show(); // вывод int, double

o2.show(); // вывод char, char*

return 0;

}

Эта программа выдаст следующий результат на экран:

10 0.23

X This is a test

В программе объявляются два типа объектов. Объект o1 использует типы данных int и double. Объект o2 использует типы данных char и char*. В обоих случаях компилятор автоматически генерирует необходимые данные и функции в соответствии с типом данных, передаваемых конст­руктору в качестве аргументов.

Функции-шаблоны и классы-шаблоны обеспечивают беспрецедентные возможности для созда­ния многократно используемого кода. Если процедура имеет общий характер, то стоит рассмот­реть возможность ее реализации в виде шаблона. После того как этот шаблон будет отлажен и проверен, можно использовать его снова и снова в различных ситуациях, не внося никаких изме­нений. Однако не надо поддаваться искушению реализовать все в виде функций-шаблонов и классов-шаблонов. Неуместное использование шаблонов может сильно запутать.

9.6 Обзор библиотеки stl

Часть работы по стандартизации C++ направлена на определение стандартного множества классов и библиотек для всех компиляторов С++, удовлетворяющих стандарту ANSI C++. В настоящее время такое множество классов и библиотек известно под именем стандартной библиотеки шаблонов (standard template library, STL). STL включает такие классы, как:

  • контейнеры – это вспомогательные объекты, содержащие другие объекты

      • vector (динамический массив)

      • queue (очередь)

      • list (линейный список)

      • stack (стек)

      • string (строка)

      • и другие.

  • алгоритмы

      • заполнение элементов контейнера инициализирующими значениями или множеством значений

      • поиск значений среди элементов контейнера

      • проверка элементов двух контейнеров на попарное равенство

      • и другие.

  • итераторы – объекты, предоставляющие возможности манипуляции элементами контейнеров

Из самого названия библиотеки STL следует, что ее компоненты – шаблоны, в основном шаблонные классы. Основные элементы STL – контейнеры, они представляют собой обобщенные понятия, поэтому реализация их в виде параметризованных классов позволяет достичь максимально возможной гибкости.

В последующих разделах будут рассмотрены три контейнерных класса – vector, string и list – основные функции и принципы работы с ними. Чтобы использовать классы STL в программе необходимо подключить соответствующие заголовочные файлы и использовать пространство имен std. Пространство имен – это множество идентификаторов, невидимых программой без явного его объявления. Для этого используется инструкция using namespace. Например, чтобы программе был доступен класс vector, следует записать:

#include <vector>

using namespace std;

Обратите внимание, что имя заголовочного файла vector не имеет расширения – это отличительная особенность всех заголовочных файлов STL. Для работы с классами string и list следует включить следующие файлы соответственно:

#include <string>

#include <list>

Подключить пространство имен std достаточно только один раз.