
- •Учебное пособие
- •Введение
- •Объектно-ориентированный подход
- •Объектно-ориентированное программирование Абстрактные типы данных
- •Базовые принципы объектно-ориентированного программирования
- •Простейший ввод и вывод
- •Объект cout
- •Манипуляторы hex и oct
- •Другие манипуляторы
- •Объект cin
- •Операторы для динамического выделения и освобождения памяти (new и delete)
- •Базовые конструкции объектно-ориентированных программ Объекты
- •Понятие класса
- •Конструктор копирования
- •Конструктор explicit
- •Указатели на компоненты класса
- •Встроенные функции (спецификатор inline)
- •Организация внешнего доступа к локальным компонентам класса (спецификатор friend)
- •Вложенные классы
- •Static-члены (данные) класса
- •Указатель this
- •Компоненты-функции static и const
- •Proxi-классы
- •Параметры ссылки
- •Независимые ссылки
- •Практические приемы ограничения числа объектов класса
- •Наследование (производные классы)
- •Конструкторы и деструкторы при наследовании
- •Виртуальные функции
- •Абстрактные классы
- •Виртуальные деструкторы
- •Множественное наследование
- •Виртуальное наследование
- •Перегрузка функций
- •Перегрузка операторов
- •Перегрузка бинарного оператора
- •Перегрузка унарного оператора
- •Дружественная функция operator
- •Перегрузка оператора []
- •Перегрузка оператора ()
- •Перегрузка операторов new и delete
- •Преобразование типа
- •Явные преобразования типов
- •Преобразования типов, определенных в программе
- •Шаблоны Параметризированные классы
- •Передача в шаблон класса дополнительных параметров
- •Шаблоны функций
- •Совместное использование шаблонов и наследования
- •Шаблоны класса и friend
- •Некоторые примеры использования шаблона класса Реализация smart-указателя
- •Классы поддерживающие транзакции
- •Задание значений параметров класса по умолчанию
- •Пространства имен
- •Ключевое слово using как директива
- •Ключевое слово using как объявление
- •Псевдоним пространства имен
- •Организация ввода-вывода
- •Состояние потока
- •Строковые потоки
- •Организация работы с файлами
- •Организация файла последовательного доступа
- •Создание файла произвольного доступа
- •Основные функции классов ios, istream, ostream
- •Основы обработки исключительных ситуаций
- •Перенаправление исключительных ситуаций
- •Исключительная ситуация, генерируемая оператором new
- •Генерация исключений в конструкторах
- •Задание собственной функции завершения
- •Спецификации исключительных ситуаций
- •Задание собственного неожиданного обработчика
- •Иерархия исключений стандартной библиотеки
- •Стандартная библиотека шаблонов (stl) Общее понятие о контейнере
- •Общее понятие об итераторе
- •Категории итераторов
- •Основные итераторы
- •Вспомогательные итераторы
- •Операции с итераторами
- •Контейнерные классы Контейнеры последовательностей
- •Контейнер последовательностей vector
- •Контейнер последовательностей list
- •Контейнер последовательностей deque
- •Ассоциативные контейнеры
- •Ассоциативный контейнер multiset
- •Ассоциативный контейнер set
- •Ассоциативный контейнер multimap
- •Ассоциативный контейнер map
- •Адаптеры контейнеров
- •Адаптеры stack
- •Адаптеры queue
- •Адаптеры priority_queue
- •Пассивные и активные итераторы
- •Алгоритмы
- •Алгоритмы сортировки sort, partial_sort, sort_heap
- •Алгоритмы поиска find, find_if, find_end, binary_search
- •Алгоритмы fill, fill_n, generate и generate_n
- •Алгоритмы equal, mismatch и lexicographical_compare
- •Математические алгоритмы
- •Алгоритмы работы с множествами
- •Алгоритмы swap, iter_swap и swap_ranges
- •Алгоритмы copy, copy_backward, merge, unique и reverse
- •Примеры реализации контейнерных классов Связанные списки
- •Реализация односвязного списка
- •Реализация двусвязного списка
- •Реализация двоичного дерева
- •Литература
- •Вопросы по курсу ооп
- •220013, Минск, п.Бровки, 6.
Контейнер последовательностей deque
Класс deque объединяет многие возможности классов vector и list. Этот класс представляет собой двунаправленную очередь. В классе deque реализован механизм эффективного индексного доступа (подобно тому, как и в классе vector).
Класс deque реализован для эффективных операций вставки в начало и конец. Класс deque обеспечивает поддержку итераторов прямого доступа, что дает возможность использовать при работе с ним любых алгоритмов STL.
Класс deque имеет базовые функции, аналогичные классу vector, при этом в класс deque добавлены компоненты-функции push_front и pop_front.
#include <iostream>
using std::cout;
using std::endl;
#include <deque>
#include <algorithm>
template<class T>
void PrintDeque(const std::deque<T> &dq);
#define SIZE 6
main()
{ std::deque<float> d,dd(3,1.5);
PrintDeque(dd);
d.push_back(2);
d.push_front(5);
d.push_back(7);
d.push_front(9);
d[4]=3; // изменить значение 5-го элемента на 3
d.at(3)=6;
try{ d.at(5)=0;
}
catch(std::out_of_range e){
cout<<"Исключение : "<<e.what();
}
PrintDeque(d);
d.erase(d.begin() + 2); // удаление 3-го элемента
PrintDeque(d);
d.insert(d.begin() + 3,7);// добавление 7 после 3-го элемента вектора
PrintDeque(d);
d.insert(d.end()-1,2,1.6);
PrintDeque(d);
d.insert(d.end(),dd.begin(),dd.end());
PrintDeque(d);
std::sort(d.begin(),d.end());
PrintDeque(d);
d.swap(dd); // замена массивов v и vv
PrintDeque(d);
PrintDeque(dd);
dd.erase(dd.begin(),dd.end()); //удаление всех элементов dd
PrintDeque(dd);
d.clear(); // чистка всего вектора
PrintDeque(d);
return 0;
}
template<class T>
void PrintDeque(const std::deque<T> &dq)
{ std::deque<T>::const_iterator pt;
if (dq.empty())
{ cout << "Deque is empty " << endl;
return;
}
cout<<"DEQUE :"
<<" размер = "<<dq.size()<<endl;
cout<<" содержимое = ";
for(pt=dq.begin();pt!=dq.end();pt++)
cout<<*pt<<' ';
cout<<endl;
}
Результат работы программы:
DEQUE : размер = 3 содержимое =1.5 1.5 1.5
Исключение : invalid deque<T> subscript
DEQUE : размер = 4 содержимое =9 5 2 6
DEQUE : размер = 3 содержимое =9 5 6
DEQUE : размер = 4 содержимое =9 5 6 7
DEQUE : размер = 6 содержимое =9 5 6 1.6 1.6 7
DEQUE : размер = 9 содержимое =9 5 6 1.6 1.6 7 1.5 1.5 1.5
DEQUE : размер = 9 содержимое =1.5 1.5 1.5 1.6 1.6 5 6 7 9
DEQUE : размер = 3 содержимое =1.5 1.5 1.5
DEQUE : размер = 9 содержимое =1.5 1.5 1.5 1.6 1.6 5 6 7 9
Deque is empty
Deque is empty
В приведенном примере использованы все ранее рассмотренные функции классов vector и list, также являющиеся компонентами класса deque. В программе были использованы все три версии функции insert:
iterator insert(iterator it, const T& x = T());
void insert(iterator it, size_type n, const T& x);
void insert(iterator it, const_iterator first, const_iterator last);
Первая версия функции предназначена для вставки после элемента, на который указывает итератор, значения, соответствующего второму параметру. Вторая версия вставляет n значений, равных третьему параметру. Наконец, третья версия вставляет значения из интервала от второго аргумента (итератора) до третьего.