
- •1.Поняття наслідування. Ключі доступу.
- •2.Простое наследование
- •3.Віртуальні методи
- •4. Механізм пізнього зв'язування
- •5.Абстрактні класи
- •6.Множественное наследование
- •7. Обробка виключень. Загальний механізм обробки виключень. Синтаксис виключень.
- •Перехоплення виключень. Список виключень функції.
- •Несподівані виключення та їх обробка.
- •Виключення в конструкторах та деструкторах.
- •Ієрархія виключень.
- •Поняття шаблону функцій.
- •Перевантаження та спеціалізація шаблону функцій.
- •Поняття шаблону класів.
- •Конкретизація та спеціалізація шаблонів класів.
- •Контейнери бібліотеки stl. Види контейнерів. Загальні поля та методи контейнерів. Ітератори. Контейнеры
- •Итераторы
- •Послідовні контейнери. Характеристика операцій, що підтримуються послідовними контейнерами.
- •Вектор. Характеристика та приклад вектора.
- •Двостороння черга (deque). Характеристика та приклад deque.
- •Список (list). Характеристика та приклад списку.
- •Стек. Характеристика та приклад стеку.
- •Операції зі стеком
- •Черга (queue). Характеристика та приклад черги.
- •Асоціативні контейнери. Загальна характеристика.
- •Словники (map). Приклад словника.
- •Множини (set). Приклад множини.
- •Бітова множина. Приклад.
Двостороння черга (deque). Характеристика та приклад deque.
Двусторонние очереди (или deques) аналогичны векторам, с той разницей, что они позволяют быстро вставлять и удалять элементы и с начала, и с конца контейнера.
Двусторонние очереди C++ обычно реализовываются как динамические массивы, растущие в оба конца. Такая реализация гарантирует доступ законстантное время, вставку и удаление с обоих концов очереди - за амортизированное константное время, вставку и удаление из середины очереди - залинейное время.
Конструкторы |
создают двустороннюю очередь и инициализируют ее какими-то данными |
Операторы |
осуществляют сравнение, присваивание и доступ к элементам двусторонней очереди |
assign |
присваивает элементы двусторонней очереди |
at |
возвращает элемент в заданной позиции |
back |
возвращает ссылку на последний элемент двусторонней очереди |
begin |
возвращает итератор на начало двусторонней очереди |
clear |
удаляет все элементы из двусторонней очереди |
empty |
истина, если двусторонняя очередь пуста |
end |
возвращает итератор на место после последнего элемента двусторонней очереди |
erase |
удаляет заданные элементы из двусторонней очереди |
front |
возвращает ссылку на первый элемент двусторонней очереди |
insert |
вставляет элементы в двусторонней очереди |
max_size |
возвращает максимальное число элементов, которое может содержать двусторонняя очередь |
pop_back |
удаляет последний элемент двусторонней очереди |
pop_front |
удаляет первый элемент двусторонней очереди |
push_back |
добавляет элемент в конец двусторонней очереди |
push_front |
добавляет элемент в начало двусторонней очереди |
rbegin |
возвращает reverse_iterator на конец двусторонней очереди |
rend |
возвращает reverse_iterator на начало двусторонней очереди |
resize |
изменяет размер двусторонней очереди |
size |
возвращает количество элементов в двусторонней очереди |
swap |
меняется содержимым данной двусторонней очереди с другой |
#include <deque>
deque();
deque( const deque& c );
deque( size_type num, const T& val = T() );
deque( input_iterator start, input_iterator end );
/ создаем двустороннюю очередь из случайных чисел
cout << "первоначальная двусторонняя очередь: ";
deque<int> dq;
for( int i = 0; i < 10; i++ ) {
int num = static_cast<int>(rand() % 10);
cout << num << " ";
dq.push_back( num );
}
cout << endl;
// находим первый четный элемент dq
deque<int>::iterator iter1 = dq.begin();
while( iter1 != dq.end() && *iter1 % 2 != 0 ) ++iter1;
// находим последний четный элемент dq
deque<int>::iterator iter2 = dq.end();
do {
--iter2;
} while( iter2 != dq.begin() && *iter2 % 2 != 0 );
cout << "первый четный элемент: " << *iter1 << ", последний четный элемент: " << *iter2 << endl;
cout << "новая двусторонняя очередь: ";
deque<int> dq2( iter1, iter2 );
for( size_t i = 0; i < dq2.size(); i++ ) {
cout << dq2[i] << " ";
}
cout << endl;