- •Лабораторная работа №6
- •1. Постановка задачи:
- •5. Функция main()
- •Лабораторная работа №11
- •1. Постановка задачи.
- •Задача 1.
- •3. Функция main().
- •Задача 2.
- •5. Описание класса
- •Int getmin() {return min;} //получение количества минут
- •Int getsec() {return sec;} //получение количества секунд
- •8. Функция main()
- •Задача 3.
- •12. Функция main()
- •Задача 4.
- •15. Функция main()
- •Задача 5.
- •19. Функция main()
- •Лабораторная работа №13
- •1. Постановка задачи. Задача 1.
- •Задача 2.
- •Задача 3.
- •2. Описание класса
- •Int getmin() {return min;} //получение количества минут
- •Int getsec() {return sec;} //получение количества секунд
- •Задача 1.
- •5. Функция main()
- •Задача 2.
- •8. Функция main()
- •Задача 3.
- •11. Функция main()
19. Функция main()
void main()
{
char ch;
try
{
int n;
cout<<"Input the size of the vector"<<endl;
cin>>n;
Vect<Time> vect1(n);
vect1.prn();
cout<<"Input position to insert min element"<<endl;
cin>>n;
vect1.ins(vect1.min_el(),n);
vect1.prn();
cout<<"After deleting elements greater than average"<<endl;
vect1.Del_m(vect1.Avg());
vect1.prn();
cout<<"Multiplicated by max"<<endl;
vect1.mult(vect1.max_el());
vect1.prn();
}
catch(int)
{
cout<<"Error";
}
cin>>ch;
}
20. Результаты работы программы:
Input the size of the vector
7
input minutes 12
input seconds 25
input minutes 15
input seconds 30
input minutes 4
input seconds 36
input minutes 8
input seconds 6
input minutes 11
input seconds 22
input minutes 5
input seconds 0
input minutes 10
input seconds 0
10:00 5:00 11:22 8:06 4:36 15:30 12:25
Input position to insert min element
2
10:00 4:36 5:00 11:22 8:06 4:36 15:30 12:25
After deleting elements greater than average
4:36 5:00 8:06 4:36
Multiplicated by max
2235:36 2430:00 3936:36 2235:36
21.
Библиотека STL состоит из набора контейнерных классов и набора обобщённых алгоритмов.
Контейнеры, существующие в STL: вектор: список, двунаправленная очередь (основные последовательные), стек, очередь, очередь с приоритетами (последовательные адаптеры), словари, множества, словари с дубликатами, множества с дубликатами (ассоциативные).
Для использования контейнера STL необходимо подключить заголовочный файл, содержащий описание данного контейнера.
Итератор – это объект (класс), используемый для доступа к элементам контейнера.
Основные операции с итераторами:
разыменование;
присваивание одного итератора другому;
сравнение итераторов на равенство и неравенство;
сдвиг на соседний элемент с помощью операции инкремента(декремента).
Цикл для перебора контейнера с использованием итератора.
container cont1;
container::iterator it1;
it1=cont1.begin();
while (it1!=cont1.end())
{
…
it1++;
}
Типы итераторов в STL: входные, выходные, прямые, двунаправленные, итераторы произвольного доступа.
Функции-члены, общие для всех контейнеров:
операторы равенства (==)и неравенства (!=);
оператор присваивания (=);
удаление всех элементов (clear);
добавление элемента или диапазона элементов на заданную позицию (insert);
удаление элемента или диапазона элементов (erase);
число элементов в контейнере (size);
максимально допустимый размер контейнера (max_size);
проверка на пустоту контейнера (empty);
итератор на начало контейнера (begin);
итератор на конец контейнера (end);
реверсивный итератор на конец контейнера;
реверсивный итератор на начало контейнера.
Для контейнера vector эффективными являются операции доступа к произвольному элементу, добавление элемента в конец, удаление элемента с конца, т. к. ячейки памяти, выделенные под элементы будут иметь подряд идущие адреса.
Для контейнера list эффективными будут операции вставки и удаления в произвольной позиции, т. к. для этого нужно только поменять значения 4-х указателей, не перемещая элементы контейнера в памяти.
Для контейнера deque эффективными будут те же операции, что и для контейнера vector, а также вставка и удаление первого элемента.
Функции-члены последовательного контейнера vector:
push_back(T& key) добавление в конец;
pop_back() удаление с конца;
insert вставка в произвольное место;
erase удаление из произвольного места;
[] доступ к произвольному элементу;
swap обмен векторов;
clear очистка вектора;
Функции-члены последовательного контейнера list:
push_back(T& key) добавление в конец;
pop_back() удаление с конца;
push_front(T& key) добавление в начало;
pop_front() удаление из начала;
insert вставка в произвольное место;
erase удаление из произвольного места;
swap обмен списков;
clear очистка списка;
splice сцепка списков.
Функции-члены последовательного контейнера deque:
push_back(T& key) добавление в конец;
pop_back() удаление с конца;
insert вставка в произвольное место;
erase удаление из произвольного места;
push_front(T& key) добавление в начало;
pop_front() удаление из начала;
[] доступ к произвольному элементу;
Удаление из вектора элементов со 2 по 5:
v.erase(v.begin()+1,v.begin()+4);
Удаление из вектора последнего элемента:
v.pop_back();
Удаление из списка элементов со 2 по 5:
My_list lst;
My_list::iterator it2,it5;
it2=it5=lst.begin();
it2++;
for(int i=0;i<4;i++)
it5++;
lst.erase(it2,it5);
Удаление из списка последнего элемента:
lst.pop_back();
Удаление из очереди элементов со 2 по 5:
dq.erase(dq.begin()+1,dq.begin()+4);
Удаление из очереди последнего элемента:
dq.pop_back();
Печать последовательного контейнера
template <class T>
void print(T &cont1)
{
T::iterator p;
p=cont1.begin();
if (cont1.empty())
cout<<”Empty”<<endl;
else
{
for(;p!=cont1.end;p++)
cout<<*p<<” “;
cout<<endl;
}
}
Адаптер контейнера – это контейнер, созданный на основе базового и реализующий часть его операций, необходимых для функционирования адаптера.
stack<int> - стек по умолчанию, реализованный на базе двусторонней очереди, stack<int,list<int> > – стек на базе списка.
Методы контейнера stack:
push() добавление в конец;
pop() удаление с конца;
top() – получение последнего элемента;
empty() – проверка, является ли стек пустым;
size() – размер стека.
Методы контейнера queue:
push() добавление в конец;
pop() удаление из начала;
front() – получение первого элемента очереди;
back() – получение последнего элемента очереди;
empty() – проверка, является ли очередь пустой;
size() – размер очереди.
Из очереди с приоритетом (priority_queue) для извлечения выбирается максимальный среди хранимых элементов,
Непосредственно удалить из стека элемент с заданным номером нельзя. Для этого нужно последовательно извлечь все элементы до заданного, а затем добавить в обратном порядке все кроме него.
Непосредственно удалить из очереди элемент с заданным номером нельзя. Для этого нужно последовательно извлечь все элементы очереди, а затем добавить в том же порядке все кроме заданного.
Печать содержимого стека
template<class T>
void print_stack(stack<T> &st)
{
while (!st.empty())
{
cout<<st.top()<<” “;
st.pop();
}
cout<<endl;
}
Печать содержимого очереди
template<class T>
void print_queue (stack<T> &q)
{
while (!q.empty())
{
cout<<q.front()<<” “;
q.pop();
}
cout<<endl;
}