
- •Строки стандартного класса string 2
- •Примеры использования методов строк-объектов 5
- •Стандартная библиотека шаблонов 14
- •Шаблонный класс для представления динамических одномерных массивов 35 Строки стандартного класса string
- •Операции
- •Методы класса string
- •Примеры использования методов строк-объектов Примеры работы со строками разных типов
- •Определение строк, присваивание, конкатенация, вычисление длины
- •Ввод-вывод
- •Методы корректировки
- •Доступ к элементу строки, метод at, метод copy
- •Методы сравнения
- •Методы поиска подстроки
- •Выделение подстроки, метод substr
- •Обеспечение ввода символов только из заданного набора
- •Подсчет количества вхождений слова в текст
- •Вывод вопросительных предложений
- •Стандартная библиотека шаблонов
- •Контейнеры
- •Общие методы и операции контейнеров Способы определения объекта для последовательного контейнера
- •Оценка числа элементов и размеров контейнера
- •Сравнение контейнеров
- •Присваивание контейнеров и обмен содержимым
- •Методы частного применения
- •Итераторы
- •Алгоритмы
- •Примеры Использование контейнера vector и его итераторов для вычисления диапазона копирования элементов массива
- •Использование контейнера vector при сортировке строк
- •Использование контейнера vector при считывании чисел из файла
- •Использование контейнера vector при считывании строк из файла
- •Использование контейнера list для реверса последовательности элементов
- •Демонстрация обратного итератора
- •Использование алгоритма find()для поиска заданного числа
- •Использование контейнера list при считывании чисел из файла
- •Использование контейнера list при считывании строк из файла
- •Использование контейнера list и потокового итератора при выводе последовательности структур на экран
- •Использование адаптера stack при считывании чисел из файла
- •Вычисление числа объектов с заданным значением
- •Поиск первого объекта с заданным значением
- •Поиск в массиве строк заданного имени
- •Использование потокового итератора при чтении вещественных чисел с клавиатуры и записи их в файл
- •Использование потокового итератора при чтении чисел из файла и выводе их на экран
- •Шаблонный класс для представления динамических одномерных массивов
Стандартная библиотека шаблонов
В любой программе, кроме операторов языка, используются средства библиотек, включаемых в среду программирования. Компиляторы Microsoft Visual C++ содержат библиотеки классов для написания приложений Windows. Часть библиотек стандартизована, т.е. должна поставляться с любым компилятором языка.
Стандартную библиотеку С++ можно условно разделить на две части. К первой относятся функции, макросы, типы и константы, унаследованные из библиотеки С, а ко второй – классы, шаблоны и другие средства С++ для ввода, вывода, хранения и обработки данных как стандартных типов, так и типов, определенных пользователем.
В классах можно выделить несколько групп в соответствии с их назначением:
потоковые классы предназначены для управления потоками данных между оперативной памятью и внешними устройствами (дисками, консолью и т.д.), а также в пределах оперативной памяти;
строковый класс string предназначен для удобной и защищенной от ошибок работы с символьными строками, лишен недостатков строк в стиле С;
контейнерные классы – реализуют наиболее распространенные структуры для хранения данных – например, векторы, списки, множества и пр.;
алгоритмы – предназначены для обработки элементов контейнеров;
итераторы – обеспечивают универсальный доступ к элементам контейнеров и их перебор;
математические классы – поддерживают эффективную обработку массивов с плавающей точкой и работу с комплексными числами;
диагностические классы – обеспечивают идентификацию типов и объектно-ориентированную обработку ошибок;
остальные классы – обеспечивают динамическое распределение памяти, обработку функциональных объектов и т.д.
Часть библиотеки, в которую входят контейнерные классы, алгоритмы и итераторы, называют стандартной библиотекой шаблонов (STL – Standard Template Library). В основе архитектурных решений библиотеки STL лежат следующие особенности.
Первая особенность – разделение данных и операций (принципы противоположны принципам ООП, где объект соединяет данные и операции). Концепция STL основана на отделении данных от операций. Данные хранятся в контейнерах, а операции определяются адаптируемыми алгоритмами. Разные алгоритмы по мере необходимости применяются к разным контейнерам. За счет этого отделения достигнуты гибкость и компактность библиотеки STL.
Вторая фундаментальная особенность STL – параметризация и контейнеров, и алгоритмов. Все компоненты STL реализованы в виде шаблонов, которые могут работать с любыми типами, для которых допустимы операции, используемые компонентом.
Третья особенность – применение итераторов. Итераторы как бы «склеивают» контейнеры и алгоритмы, благодаря чему любой алгоритм может работать практически с любым контейнером.
Для использования контейнеров и адаптеров необходимо подключать стандартные заголовочные файлы:
-
заголовочный файл
назначение
#include<vector>
вектор
#include<deque>
двусторонняя очередь
#include<list>
двусвязный список
#include<stack>
стек
#include<queue>
очередь, очередь с приоритетами
#include<set>
множество, множество с дубликатами
#include<map>
словарь, словарь с дубликатами
#include<bitset>
последовательность битов, битовое множество
Для использования алгоритмов и итераторов необходимо подключать стандартные заголовочные файлы:
-
заголовочный файл
назначение
#include<algorithm>
алгоритмы
#include<functional>
функциональные объекты
#include<iterator>
итераторы