
- •«Объектно-ориентированный анализ и проектирование»
- •1. Принципы ооп. Классы.
- •Описание классов.
- •Объекты класса.
- •Конструкторы
- •Конструктор копирования
- •Статические элементы класса
- •Дружественные функции и классы
- •Деструкторы
- •Перегрузка операций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Рекомендации по составу классов
- •2. Наследование
- •Ключи доступа
- •Простое наследование
- •Пример замещения функций (практикум)
- •Виртуальные методы
- •Множественное наследование
- •3. Отношения между классами. Диаграммы класссов на языке uml.
- •4. Шаблоны классов.
- •4.1. Определения шаблонов классов Queue и QueueItem
- •4.2. Конкретизация шаблона класса
- •4.3. Аргументы шаблона для параметров-констант
- •4.4. Функции-члены шаблонов классов
- •5. Обработка исключительных ситуаций
- •5.1. Общий механизм обработки исключений.
- •5.2 . Синтаксис исключений
- •5.3. Перехват исключений
- •5.4. Исключения в конструкторах и деструкторах
- •Vector(int n) // Конструктор
- •5.5. Список исключений функции.
- •6. Строки
- •Преобразование строк
- •7. Контейнерные классы
- •7.1. Векторы.
- •7.2. Двухсторонние очереди (deque).
- •7.3. Списки (List).
- •7.4. Стеки
- •7.5. Очереди (queue)
- •7.6. Очередь с приоритетами(priority_queue)
- •8. Ассоциативные контейнеры
- •8.1. Словари (map)
- •8.2. Словари с дубликатами (multimap)
- •8.3. Множества (set)
- •8.4. Множества с дубликатами (multiset)
- •8.5. Битовые множества (bitset)
7.2. Двухсторонние очереди (deque).
Класс deque обеспечивает работу с двухсторонней очередью, реализующей произвольный доступ к элементам, добавление в любой конец и удаление из любого конца.
Конструкторы:
explicit deque(); // конструктор по умолчанию
explicit deque(size_t , const T& value = T()); // создает очередь длины n и заполняет одинаковыми элементами типа T : deque<int> v2(10, 1);
template <class InIter> deque(InIter first, InIter last); // первый конструктор копирования:: deque<int> v3(v1.begin(), v1.begin() + 2);
deque(const deque<T>& x); // второй конструктор копирования:
deque <int> v4(v1);
Методы работы с двухсторонней очередью те же, что и с вектором:
reference operator[](size_t num ); // reference - ccылка на элемент без проверки выхода за границы;
reference at(size_t n) ; // ccылка на n – ый элемент;
void push_back(const T& val); // вставка в конец;
void pop_back(); // удаление из конца;
iterator insert(iterator position, const T& val);
void insert(iterator position, size_t num, const T& val);
template<class InIter> void insert(iterator position, InIter start, Initer end);
iterator erase(iterator position);
iterator erase(iterator start, iterator end);
void clear(); // очистка вектора;
reference back(); // reference - ccылка на последний элемент;
reference front(); // ссылка на первый элемент;
Нет capacity() и reserve();
void resize(size_t n, T val = T()); // увеличение или уменьшение размера вектора; val присваивается новым значениям, вставляемым в конец очереди;
Кроме этого, имеются методы:
void push_front(const T& val) ;
void pop_front();
Можно сравнивать очереди, используя операции сравнения как для векторов.
7.3. Списки (List).
List – двухсвязный список, каждый узел которого содержит ссылку на предыдущий и последующий элементы. Списки не поддерживают произвольный доступ к элементу.
Конструкторы:
explicit list(); // конструктор по умолчанию;
explicit list(size_t , const T& value = T()); // создает список длины n и заполняет одинаковыми элементами типа T: list<int> v2(10, 1);
template <class InIter> list(InIter first, InIter last); // первый конструктор копирования: list<int> v3(v1.begin(), v1.begin() + 2);
list (const list <T>& x); // второй конструктор копирования:
list<int> v4(v1);
Методы работы те же, что и с двухсторонней очередью. Кроме того,:
void remove(const T &val); // удаляет все элементы со значением val;
void reverse();// меняет порядок следования на противоположный;
void sort();
void merge(list<T> &ob); // объединение (на базе «слияния») двух упорядоченных списков;
void splice(iterator I, list<T> &ob);// вставляет (за счет изменения указателей) содержимое объекта ob (который становится пустым) перед элементом списка, заданным итератором I;.
void splice(iterator I, list<T> &ob, iterator element); // «удаляет» из объекта ob элемент, на который установлен итератор element, и вставляет его в позицию списка, заданную итератором I;
void splice(iterator I, list<T> &ob, iterator start, iterator end);// «удаляет» из объекта ob элементы, лежащие в диапозоне от start до end и вставляет его в позицию списка заданную итератором I;.
void swap(list<T> &ob);// меняет местами элементы из списка и объекта ob;
void unique() ; // удаляет дубликаты.