- •Материал к курсам «Объектно-ориентированное программирование», «Инструментальные средства визуального программирования» и «Современные технологии и инструментарий программирования»
- •8. Интерфейс графического устройства, цвет и шрифт 71
- •10. Консольные приложения Windows 91
- •21. Алгоритмы 220
- •22. Профилирование программы в Microsoft Visual Studio 6.0 238
- •23. Некоторые функции api Win32 240
- •24. Разное-всякое 247
- •Часть2.Технология сом 299
- •Предисловие автора
- •1.3.Работа со строками
- •1.3.1.Кодировки и кодовые страницы
- •1.3.2.О кодировке Unicode
- •1.3.3.Использование класса cString
- •1251 (Cyrillic (Windows) ) в кодировку 866 (Cyrillic dos).
- •1.3.4.Некоторые полезные функции класса cString
- •1.4.Явное преобразование типов
- •1.4.1.Преобразование полиморфных типов dynamic_cast
- •1.4.2.Преобразование неполиморфных типов static_cast
- •1.4.3.Преобразование reinterpret_cast
- •2.Соглашения об именах
- •3.Пространства имен
- •4.Макросы и отладка
- •4.1.Макрос trace
- •4.2.Объект afxDump
- •4.3.Классы cDumpContext и cObject
- •4.5.Макрос assert_valid
- •4.6.Макрос verify
- •4.7.Автоматическая диагностика неуничтоженных объектов
- •5.Каркас приложений mfc
- •5.1.Понятие каркаса приложений
- •Каркас приложений и библиотека классов
- •Пример на базе каркаса приложений
- •5.2.Сопоставление сообщений в библиотеке mfc
- •5.3.Документы и их представление
- •5.4.Функции взаимодействия «документ-вид»
- •5.5.Простейшее приложение на базе архитектуры «документ-вид»
- •5.6.Усложненное взаимодействие «документ-вид»
- •6.Класс «вид» библиотеки mfc (версия mvs 6.0)
- •6.1.Что такое «вид»
- •6.2.Интерфейсы sdi и mdi
- •6.3. Сценарий создания приложения drw в ис mvs 6.0
- •6.4.Класс cdrwView
- •6.5.Рисование внутри окна представления: Windows gdi
- •Функция-член OnDraw
- •Контекст устройства в Windows
- •Добавление кода рисования в программу drw
- •6.6.Первое знакомство с редакторами ресурсов
- •Содержимое файла drw.Rc
- •Работа с редактором диалоговых окон
- •6.7.Конфигурации Win32 Debug и Win32 Release
- •6.8.Активизация диагностических макросов
- •6.9.Предкомпилированные заголовочные файлы
- •6.10.Два способа запуска программы
- •7.Класс «вид» библиотеки mfc (версия mvs 2005)
- •7.1.Что такое «вид»
- •7.2.Интерфейсы sdi и mdi
- •7.3. Сценарий создания приложения с архитектурой документ-вид в среде mvs 2005
- •7.4.Класс cdrwView
- •7.5.Рисование внутри окна представления: Windows gdi
- •Функция-член OnDraw
- •Контекст устройства в Windows
- •Добавление кода рисования в программу drw
- •7.6.Конфигурации Win32 Debug и Win32 Release
- •7.7.Активизация диагностических макросов
- •7.8.Два способа запуска программы
- •8.Интерфейс графического устройства, цвет и шрифт
- •8.1.Классы контекста дисплея cClientDc и cWindowDc
- •8.2.Создание и уничтожение cdc-объектов
- •8.3.Состояние контекста устройства
- •8.4.Класс cPaintDc
- •8.5.Объекты gdi
- •8.6.Создание и уничтожение gdi-объектов
- •8.7.Управление gdi-объектами
- •8.8.Стандартные gdi-объекты
- •8.9.Время жизни контекста устройства
- •9.1.Приложение, основанное на диалоговом окне
- •9.2.Приложение без поддержки архитектуры документ-вид
- •9.3.Приложение с поддержкой архитектуры документ-вид
- •9.4.Краткая характеристика базовых классов класса вид
- •9.4.1.Класс cView
- •9.4.2.Класс cFormView
- •9.4.3.Класс cHtmlView
- •9.4.4.Класс cListView
- •9.4.5.Класс cRichEditView
- •9.4.6.Класс cScrollView
- •9.4.7.Класс cTreeView
- •10.2.Создание консоли
- •10.3.Закрытие консоли
- •10.4.Дескрипторы консоли
- •10.5.Входной буфер консоли
- •10.6.Буферы дисплея консоли
- •10.7.Размер буфера окна и дисплея
- •10.8.Скроллинг дисплейного буфера
- •10.9.Методы ввода/вывода в консольных приложениях
- •10.10.Режимы консоли
- •10.11.Высокоуровневый консольный ввод/вывод
- •10.12.Высокоуровневые режимы консоли
- •10.13.Высокоуровневые функции ввода и вывода консоли
- •10.15.Низкоуровневые режимы консоли
- •10.16.Низкоуровневые функции ввода консоли
- •10.14.Низкоуровневые функции ввода и вывода консоли
- •10.17.Низкоуровневые функции вывода консоли
- •10.18.Кодовые страницы в консольных приложениях
- •10.19.Пример консольного приложения ColorRusConsole
- •10.20.Использование графики в консольных приложениях
- •10.21.Изменение заголовка окна приложения и его прятание
- •11.Архитектура документ-вид и диалоговое окно
- •11.1.Как получить доступ к документу из диалогового окна
- •11.1.1.Первый способ
- •11.1.2.Второй способ
- •11.2.Как получить доступ к представлению из диалогового окна
- •11.3.Отображение данных в управляющих элементах диалогового окна и их получение (mvs 6.0)
- •11.4.Создание оконных подклассов для расширенного управления вводом данных
- •12.Обработка файлов
- •12.1.Обработка текстовых файлов (mvs 6.0)
- •12.2.Обработка текстовых файлов (mvs 2005)
- •12.3.Обработка двоичных файлов
- •12.4.Поиск файлов и каталогов по заданному пути и маске
- •12.5.Диалоги по выбору имени файла и каталога
- •13.Обработка сообщений Windows
- •13.1.Обработка сообщений в рамках одного приложения
- •13.2.Об обработке команд
- •13.3.Обработка сообщений в рамках системы
- •14.Разработка и использование собственных dll
- •14.1.Основы dll
- •14.1.1.Согласование импортируемых элементов с экспортируемыми
- •14.1.2.Явное и неявное связывание
- •14.1.3.Связывание по символьным именам против связывания по порядковым номерам
- •14.1.4.Точка входа в dll: функция DllMain
- •14.1.5.Описатели экземпляров и загрузка ресурсов
- •14.1.6.Порядок поиска dll клиентской программой
- •14.1.7.Отладка dll
- •14.1.9.Общие dll mfc-библиотеки
- •14.1.10.Dll-расширения: экспорт классов
- •14.1.11.Последовательность поиска ресурсов в dll-расширении
- •14.2.Разработка библиотеки
- •14.3.Разработка клиентского приложения, использующего библиотеку dll
- •15.Обработка растровых изображений
- •16.Обработка исключительных ситуаций
- •If (блок будет работать)
- •16.1.Введение в обработку исключительных ситуаций
- •16.2.Синтаксис обработки исключительных ситуаций
- •16.3.Синтаксис инициирования исключительных ситуаций
- •16.4.Примеры генерации и обработки исключительных ситуаций
- •17.Классы
- •17.1.Пример класса tVector
- •17.2.Класс tVector с перегруженными операциями
- •18.Шаблоны классов
- •18.1.Пример шаблона класса
- •18.2.Шаблон класса tVector
- •19.Стандартная библиотека, библиотеки mfc и atl
- •19.1.Состав стандартной библиотеки
- •19.2.Библиотеки mfc и atl
- •20.Коллекции
- •20.1.Обзор коллекций mfc
- •20.2.Шаблонные классы коллекций mfc
- •20.3.Использование массивов, списков и ассоциативных массивов
- •20.3.1.Использование простых массивов и списков
- •20.3.2.Члены класса cArray
- •Конструкторы
- •Атрибуты
- •Обработка
- •Доступ к элементам
- •Увеличение размера массива
- •Вставки и удаления
- •Операции
- •20.3.3.Члены класса cList
- •Параметры
- •Возвращаемое значение
- •Замечания
- •Параметры
- •Возвращаемое значение
- •20.3.4.Использование простых ассоциативных массивов
- •20.4.Использование шаблонов коллекций типизированных указателей
- •20.4.1.Использование массивов и списков типизированных указателей
- •20.4.2.Использование типизированных указателей на ассоциативные массивы
- •20.5.Использование контейнера vector
- •20.5.1.Конструкторы
- •Пример использования конструкторов
- •20.5.4.Иллюстрация использования класса vector
- •21.Алгоритмы
- •21.1.Общие соглашения
- •21.2.Итераторы
- •21.3.Функциональные объекты
- •21.4.Распределители
- •21.5.Состав библиотеки алгоритмов
- •21.6.Немодифицирующие алгоритмы
- •21.7.Пример использования шаблонной функции sort() из библиотеки алгоритмов
- •21.8.Сортировка массива объектов пользовательского класса
- •21.9.Еще одна иллюстрация некоторых алгоритмов на примере обработки числового массива
- •22.Профилирование программы в Microsoft Visual Studio 6.0
- •23.Некоторые функции api Win32
- •23.1.Получение информации о компьютере и операционной системе
- •23.1.1.Функция GetLogicalDrives
- •23.1.2.Функция GetDriveType
- •23.1.3.Функция GetDriveType
- •23.1.4.Функция GetDiskFreeSpaceEx
- •23.1.5.Функция GlobalMemoryStatus
- •23.1.6.Функции GetComputerName, GetUserNameA
- •23.1.7.Функции GetSystemDirectory, GetTempPath, GetWindowsDirectory, GetCurrentDirectory
- •23.1.8.Функция GetSystemInfo
- •24.Разное-всякое
- •24.1.Русификация приложений
- •24.2.Помощь и всплывающие подсказки
- •24.3.Использование ini-файла
- •24.3.1.Ansi-версия программы для среды mvs 6.0.
- •24.3.2.Unicode-версия программы для ис mvs-2005 и mvs-2008.
- •24.3.3.Ansi-версия программы для ис mvs-2005.
- •24.3.4.Ansi-версия программы для ис mvs-2008
- •24.4.Установка размеров и положения главного окна-рамки приложения
- •24.5.Создание дополнительного потока в консольном приложении
- •24.6.Интеллектуальные указатели
- •24.7.Управление формой курсора мыши
- •24.8.Как выйти из длительного цикла
- •24.9.Получение изображения содержимого окна
- •Сохранение изображения в файле
- •0, // Первая строка развертки, которая должна
- •0, // Число копируемых линий
- •Int I; // Количество выбираемых линий
- •0, // Первая строка развертки, которая должна быть выбрана
- •0, // Число копируемых линий
- •0, // Первая выбираемая линия для изображения назначения
- •0, // Режим использования
- •24.10.Подстройка очертания окна под контур изображения
- •24.11.Как корректно завершить приложение с графическим интерфейсом из него самого
- •24.12.Обработка ошибок ввода
- •25.Интегрированная среда Microsoft Visual Studio 2005
- •25.1.Терминология
- •25.2.Свойства решения и проекта
- •25.3.Что обозначают иконки на вкладке Class View
- •26.О справочной системе msdn версий 6.0 и 2005
- •26.1.Примеры приложений (версия 6.0)
- •26.2.Учебные пособия (tutorials)
- •26.3.Примеры приложений из msdn-2005
- •26.3.1.Примеры приложений mfc (mfc samples)
- •27.Процессы и потоки
- •27.1.Основные понятия Понятие приложений, процессов и потоков
- •Текущие диск и каталог для процесса
- •Определение версии системы
- •Когда полезно создавать потоки
- •Когда многопоточность неэффективна
- •Механизм многопоточности Windows
- •Приостановка, возобновление и переключение потоков
- •Приостановка и возобновление процессов
- •27.2.Функция потока
- •Функция CreateThread
- •Завершение потока
- •Часть2.Технология сом
- •28.Краткий обзор концепций программирования
- •29.Обзор технологии .Net и c#
- •29.1.Введение
- •29.2.Характеристика платформы .Net Framework
- •Среда разработки: Microsoft Visual Studio
- •Язык f#
- •29.3.Пример консольного приложения
- •29.4.Класс стек на основе связного списка
- •29.5.Чтение текстового файла
- •30.Предпосылки возникновения com
- •31.Межпроцессное взаимодействие
- •34.Введение в com технологии
- •34.1.Основные понятия и определения
- •34.2.Технология com как спецификация и реализация
- •34.3.Составляющие приложений com
- •35.Способы реализации сом серверов
- •35.1.Виды серверов и их основные характеристики
- •35.2.Алгоритм взаимодействия клиента с внутрипроцессным сервером
- •Последовательность действий при вызове клиентом внутрипроцессного сервера.
- •Последовательность действий при вызове клиентом локального или удаленного сервера
- •36.Интерфейсы
- •37.Доступ к серверу с помощью пользовательских интерфейсов
- •38.Доступ к серверу с помощью интерфейса iDispatch
- •38.1.Сценарий для версии mvs 6.0
- •38.2.Сценарий для версии mvs 2005
- •38.3.Доступ к серверу Excel в mvs 2005 с помощью диспетчерского интерфейса
- •39.Применение интеллектуальных указателей для доступа к серверам
- •39.1.Импорт библиотеки типов
- •39.2.Доступ к серверу SolidWorks 2003 с помощью интеллектуальных указателей
- •39.3.Доступ к серверу SolidWorks 2007 с помощью интеллектуальных указателей
- •39.4.Доступ к серверу Microsoft Word с помощью интеллектуальных указателей из консольного приложения
- •39.5.Доступ к серверу Microsoft Word с помощью интеллектуальных указателей из gui-приложения
- •40.Внедрение и связывание объектов
- •40.1.Понятие внедрения и связывания объектов
- •40.2.Серверы и контейнеры
- •41.Обработка ошибок
- •41.1.Функция SetErrorMode – управление реакцией программы на ошибочные состояния
- •41.2.Функции GetLastError и SetLastError – получение кода ошибки и его установка
- •41.3.Коды ошибок hresult
- •41.4.Получение текстов сообщений об ошибках
- •42.Типы данных сом
- •42.1.Типы данных методов и свойств сом объектов
- •43.Приложения
- •43.1.Словарь терминов
- •43.2.О регистрации внутрипроцессного сервера сом
- •5. Степанов а., Менг Ли. Руководство по стандартной библиотеке шаблонов (stl)/ Пер. На русский а.Суханова и а.Кутырина – м.: 1999.
- •Список литературы по платформе .Net
- •9. Дон Бокс, Крис Селлз. Основы платформы .Net, том 1. Общеязыковая исполняющая среда /Пер. С англ. – м.; сПб.: к.: Издательский дом "Вильямс", 2003. – с.288. Isbn 5-8459-0455-2
- •10. Деймьен Уоткинз, Марк Хаммонд, Брэд Эйбрамз. Программирование на платформе .Net среда /Пер. С англ. – м.; сПб.: к.: Издательский дом "Вильямс", 2003. – с.368. Isbn 5-8459-0456-0
- •11. Джеффри Рихтер. Clr via c#. Программирование на платформе Microsoft .Net Framework 2.0 на языке c#. Мастер-класс / Пер. С англ. – м.:Издательство «Русская редакция»; сПб.: Питер, 2007. - 656с.
- •12. Джеффри Рихтер. Программирование на платформе Microsoft .Net Framework / Пер. С англ. – м.:Издательско-торговый дом «Русская редакция», 2003 - 512с.
- •14. Пауэрс Ларс, Майкл Снелл. Microsoft Visual Studio 2008 / Пер. С англ. — сПб.:
- •Список литературы по технологии сом
- •13. Дейл Роджерсон. Основы сом/Пер. С англ.–2-е изд., исправл. И дополн.–м,:Изд.-торг. Дом «Русская редакция».–2000, 400с.
- •15. Дэвид Чеппел. Технология ActiveX и ole/ Пер. С англ. – м.: Издательский отдел "Русская редакция" тоо "Channel Traiding Ltd.", 1999. – 320с.
- •16. Бокс д. Сущность технологии сом. Библиотека программиста. — сПб.: Питер, 2001. — 400 с.: ил. (Есть в электронном формате)
- •17. К. Таваре, к. Фертитта, б. Ректор, к. Селлз. Библиотека atl 8: внутренняя структура и применение. Microsoft Visual Studio 2005. – м.; сПб.:, к.: Издательский дом "Вильямс", 2007, 736с.
18.2.Шаблон класса tVector
Все описания надо разместить в заголовочном файле
template <class ElemType>
class TVector
{
public:
TVector();
TVector(int iSize, int iGain=0, ElemType InitValue=0);
virtual ~TVector();
bool SetCapacity(int NewCapacity);
bool SetElem(const ElemType &Value, int Index);
bool GetElem(ElemType &Value, int Index) const;
bool InsertElem(const ElemType &Value, int Index);
bool DeleteElem(int Index);
void AddElem(const ElemType &Value);
int Size() const {return VectorSize;}
int Capacity() const {return VectorCapacity;}
bool InsertVec(TVector &SubVector, int Index);
ElemType& operator [](int Index);
friend ostream & operator <<(ostream &out,const TVector<ElemType> &Vec)
{
if(!Vec.pVec) return out;
for(int i=0;i<Vec.VectorSize; i++)
{
out.width(5); out.precision(2); out.fixed;
out<<Vec.pVec[i];
}
return out;
}
protected:
ElemType * pVec;
int VectorSize, VectorCapacity, Gain;
};
template <class ElemType>
TVector<ElemType>::TVector(int iSize, int iGain, ElemType InitValue)
{
Gain=iGain;
if(iSize<=0)
{
pVec=0;
VectorCapacity=VectorSize=0;
return;
}
pVec=new ElemType [iSize];
VectorCapacity=VectorSize=iSize;
for(int i=0;i<VectorSize; pVec[i++]=InitValue);
}
// …
template <class ElemType>
bool TVector<ElemType>::InsertVec(TVector<ElemType> &SubVector, int Index)
{
if((Index<0)||(Index+SubVector.Size()>VectorSize-1))
return false;
if(VectorSize+SubVector.Size()>VectorCapacity)
SetCapacity(VectorSize+SubVector.Size());
VectorSize+=SubVector.Size();
for(int i=VectorSize-1;i>=Index; i--) pVec[i] = pVec[i-SubVector.Size()];
/*!!!*/ for(int i=Index; i<Index+SubVector.Size(); i++) pVec[i]=SubVector[i-Index];
return true;
}
// и т.д.
Использование шаблона:
void Print(TVector<double> &Vec)
{
cout<<"=========================="<<endl;
cout<<"Vec.Capacity=="<<Vec.Capacity()<<" Vec.Size=="<<Vec.Size()<<endl;
cout<<Vec;
cout<<endl<<"=========================="<<endl;
}
TVector <double> MyVec(3,5,-1.1);
int N=5,Index,i;
double Val=0.1;
try
{
for(i=0;i<N; i++)
{
MyVec.AddElem(Val);
Val+=1;
}
MyVec[-1]=0; // для проверки того, что ИС будет сгенерирована и перехвачена
}
catch(char * Mes)
{
AfxMessageBox(CString(Mes));
}
19.Стандартная библиотека, библиотеки mfc и atl
Зачем рекомендуется использовать универсальные средства стандартной библиотеки вместо разработки своих узко-специализированных и, возможно, более эффективных?
Во-первых, использование программистом стандартных контейнеров и алгоритмов в своей программе делает ее более понятной для другого программиста, вынужденного разбираться в «чужом» коде.
Во-вторых, средства стандартной библиотеки хорошо протестированы и вероятность наличия в них ошибок достаточно мала.
В-третьих, эти средства разработаны высоко профессиональными специалистами и в силу этого они достаточно эффективны.
19.1.Состав стандартной библиотеки
В соответствии со стандартом, любая полная реализация языка С++ должна включать стандартную библиотеку. Помимо такой библиотеки большинство реализаций предоставляют и другие библиотеки, в частности, библиотеки поддержки графического интерфейса пользователя (GUI –Graphical User Interface). Например, в состав среды Visual C++ входят библиотека базовых классов (MFC – Microsoft Foundation Classes) и библиотека шаблонных классов (ATL – Active Template Library).
Для многих заголовочных файлов стандартной библиотеки языка С <X.h> имеется соответствующий стандартный заголовочный файл С++ <cX>. Например, директива #include <cstdio> дает тот же результат, что и #include <stdio.h>. Этот результат становится очевидным, если посмотреть на содержимое заголовочного файла cstdio (он не имеет расширения):
// cstdio standard header
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef _CSTDIO_
#define _CSTDIO_
#ifdef _STD_USING
#undef _STD_USING
#include <stdio.h>
#define _STD_USING
#else
#include <stdio.h>
#endif /* _STD_USING */
#endif /* _CSTDIO_ */
В табл. 1 перечислены заголовочные файлы стандартной библиотеки языка C++. Часть из этих файлов, а именно 13, входят в состав стандартной библиотеки шаблонов (STL – Standard Template Library). Файлы сгруппированы по категориям [4].
Таблица 1
Состав стандартной библиотеки С++
Файл |
Что объявлено |
Контейнеры |
|
<vector> |
одномерный массив элементов Т (STL) |
<list> |
двусвязный список элементов Т (STL) |
<deque> |
очередь элементов Т с двумя концами (STL) |
<queue> |
очередь элементов Т (STL) |
<stack> |
стек элементов Т (STL) |
<map> |
ассоциативный массив элементов Т (STL) |
<set> |
множество элементов Т (STL) |
<bitset> |
битовый набор (массив бит) |
|
|
Основные утилиты |
|
<utility> |
пары (pair) и операции (STL) |
<functional> |
объекты-функции (STL) |
<memory> |
распределители памяти для контейнеров (STL) |
<ctime> |
конвертирование времени и даты между различными форматами |
|
|
Итераторы |
|
<iterator> |
итераторы и их поддержка (STL) |
|
|
Алгоритмы |
|
<algorithm> |
основные алгоритмы (STL) |
<cstdlib> |
функции bsearch() и qsort() |
|
|
Диагностика |
|
<stdexcept> |
объявления классов стандартных исключительных ситуаций |
<cassert> |
макросы утверждений |
<cerrno> |
обработка ошибок в стиле языка С |
|
|
Строки |
|
<string> |
строка элементов Т |
<cctype> |
классификация символов |
<cwtype> |
классификация символов из расширенного набора |
<cstring> |
функции над строками в стиле С |
<cwchar> |
функции над строками символов из расширенного набора в стиле С |
<cstdlib> |
функции над строками в стиле С |
|
|
Ввод/вывод |
|
<iosfwd> |
предварительные объявления средств ввода/вывода |
<iostream> |
стандартные объекты и операции с потоками ввода/вывода |
<ios> |
базовые классы потоков ввода/вывода |
<streambuf> |
буферизация потоков |
<istream> |
шаблон потока ввода |
<ostream> |
шаблон потока вывода |
<iomanip> |
манипуляторы для управления состоянием потока |
<sstream> |
потоки в строки/из строк |
<cstdlib> |
функции для работы с символами |
<fstream> |
потоки ввода/вывода в файлы |
<cstdio> |
семейство функций ввода/вывода printf() |
<cwchar> |
ввод/вывод символов из расширенного набора в стиле printf() |
|
|
Локализация |
|
<locale> |
локализует различия в человеческих языках и культурах |
<clocale> |
локализует различия в человеческих языках и культурах в стиле С |
|
|
Поддержка языка (программирования) |
|
<limits> |
числовые ограничения |
<climits> |
макросы пределов скалярных чисел в стиле С |
<cfloat> |
макросы пределов чисел с плавающей точкой в стиле С |
<new> |
динамическое распределение памяти |
<typeinfo> |
поддержка идентификации типов во время выполнения |
<exception> |
поддержка обработки исключительных ситуаций |
<cstddef> |
языковая поддержка библиотеки С |
<cstdarg> |
поддержка функций с переменным числом аргументов |
<csetjmp> |
раскрутка стека в стиле С (для поддержки нелокальных передач управления) |
<cstdlib> |
завершение программ |
<ctime> |
системные часы |
<csignal> |
для обработки исключительных ситуаций в стиле С |
|
|
Числа |
|
<complex> |
комплексные числа и операции над ними |
<valarray> |
векторы чисел и операции над ними |
<numeric> |
шаблоны функций, реализующих распространенные числовые операции (STL) |
<cmath> |
общие математические функции |
<cstdlib> |
случайные числа в стиле С |
В качестве основного литературного источника по стандартной библиотеке я бы рекомендовал работу [4], а, в частности, по библиотеке стандартных шаблонов работу [5], одного из авторов которой – Степанова – считают чуть не единственным разработчиком этой библиотеки. Работа [6] также содержит описание, с примерами, библиотеки шаблонов и алгоритмов.
