- •Лекция 1 Динамическая память и интеллектуальные указатели.
- •Лекция 2
- •Лекция 3
- •Исчерпание памяти
- •Лекция 4 Smart-pointer для обработки исключений
- •Создание собственного кода удаления
- •Класс unique_ptr
- •Класс weak_ptr
- •Использование динамических массивов
- •Смарт поинтеры и динамические массивы
- •Класс allocator
- •Тема 2. Обработка исключительных ситуаций
- •Лекция 7
- •Класс Exception
- •Лекция 8
- •Потоки, буферы и файл iostream
- •Перегруженная операция вставки
- •Лекция 9
- •Ввод с помощью cin
- •Тема 4. Файловый ввод/вывод
- •Лекция 10
- •Режимы открытия файла
- •Бинарные файлы
- •Лекция 11
- •Тема 5. Библиотека шаблонов Standart Template Library (stl)
- •Шаблонный класс Vector
- •Лекция 12
- •Цикл for , основанный на диапазоне
- •Обобщённое программирование
- •Лекция 13
- •Виды итераторов
- •Входные итераторы
- •Однонаправленные итераторы
- •Двунаправленные итераторы
- •Произвольного доступа
- •Лекция 14 Двунаправленные итераторы
- •Виды контейнеров
- •Лекция 15 Разработка с использованием Java-платформы
- •Этапы развития языка Java
- •Байт-код
- •Особенности языка Java
- •Программная платформа и виртуальная машина Java
- •Особенности разработки и исполнения объектно-ориентированных приложений на Java Сборка мусора в Java
- •Пакет jdk
- •Ide для работы на Java
- •Особенности настройки работы платформы Java
- •Запуск приложения на языке Java без ide
- •Особенности лексики Java
- •Примитивные типы данных Java
- •Переменные
- •Объявление переменной
- •Область и срок действия переменной
- •Преобразование и приведение типов. Автоматическое приведение и продвижение типов в выражениях. Логические выражения. Арифметические операции
- •Логические операции
- •Предшествование операций
- •Управляющие операторы
- •Операторы выбора Условный оператор if
- •Операторы цикла
- •Разновидность цикла for в стиле for each
- •Применение оператора instanceof
- •Принципы ооп
Лекция 12
Функция scope (swap?) класса вектор будет работать эффективнее автономной функции scope. Автономная версия позволяет обменивать содержимое контейнеров независимо от типа.
Функция for_each работает с любым классом-контейнером, принимает 3 параметра. Первые 2 из них определяют итераторы, определяющие диапазон обрабатываемых аргументов, а третий определяет указатель на функцию. Функция for_each принимает указанную в аргументе функцию ко всем элементам контейнера в указанном диапазоне. Функция в аргументе не должна изменять значение аргументов контейнера.
Функция shuffle, которая рекомендуется к использованию вместо random_shuffle(deprecated), принимает в качестве аргументов 2 итератора, указывающие границы диапазона и тусуют элементы в этом диапазоне случайным образом. Третий параметр функции shuffle указывает генератор псевдослучайных чисел для выполнения этой операции.
В отличие от функции for_each, которая работает с любым контейнерным классом, функция shuffle требует, чтобы класс контейнера позволял доступ к своим элементам в произвольном порядке.
Функция sort также требует произвольного доступа и должна получить положение элемента на единицу дальше конечного в диапазоне. При необходимости в функцию sort можно передать способ сравнивания объектов. Если он не указан, то сортирует по возрастанию. Если элементами контейнера являются объекты, тип которых определен пользователем, то для этого типа должен быть определен перегруженный оператор “меньше”, иначе sort для этого типа работать не будет.
Первый вид упорядочения( когда используется перегрузка оператора меньше и сравниваются значения всех полей называется полным упорядочением). При нем, если условие а<b и а<b ложны, то объекты равны между собой. Если сравниваются не все поля объектов, то объекты могут быть одинаковыми по одному критерию, а фактически быть разными( квази-упорядочение). При этом объекты не идентичны, а эквиваленты.
Цикл for , основанный на диапазоне
Аргументы, указанные в круглых скобках цикла for, объявляют тип переменной цикла, хранящийся в контейнере и имя этого контейнера. Затем в цикле именованная переменная используется для поочередного(последовательного) обращения к каждому из элементов контейнера.
В отличие от функции for_each() цикл for , основанный на диапазоне может изменять содержимое контейнера. При этом важно указать параметр как ссылку.
Обобщённое программирование
STL является примером обобщенного программирования. При ООП программирование основное внимание уделяется данным, а при обобщенном программирование – алгоритмам. Общим для ООП и обобщенного программирования является абстрагирование и создание повторно используемого кода. Целью обобщенного программирования является создание кода, которые не зависит от типов данных. Подобно тому, как шаблоны обеспечивают независимость от типов хранимых данных, итераторы обеспечивают независимость от типа используемого контейнера.
Целью обобщенного программирования может быть получение единственной функции (например, функции find), которая работала бы и с массивами, и со списками, и с векторами, и с очередями, и с map, и с другими любыми контейнерами.
То есть функция должна быть независима не только от типа данных, хранящихся в контейнере, но и от структуры данных самого контейнера. То есть функция должна быть не только независимой от типа данных, хранящихся в контейнере, но и от структуры данных самого контейнера. Шаблоны обеспечивают обобщенное представление типов данных, хранимых в контейнере.
Обобщенным представлением процесса перемещения по элементам контейнера является итератор.
5 мая 2021