Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 Вариант.doc
Скачиваний:
11
Добавлен:
17.09.2019
Размер:
227.84 Кб
Скачать

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.

  1. Библиотека STL состоит из набора контейнерных классов и набора обобщённых алгоритмов.

  2. Контейнеры, существующие в STL: вектор: список, двунаправленная очередь (основные последовательные), стек, очередь, очередь с приоритетами (последовательные адаптеры), словари, множества, словари с дубликатами, множества с дубликатами (ассоциативные).

  3. Для использования контейнера STL необходимо подключить заголовочный файл, содержащий описание данного контейнера.

  4. Итератор – это объект (класс), используемый для доступа к элементам контейнера.

  5. Основные операции с итераторами:

    1. разыменование;

    2. присваивание одного итератора другому;

    3. сравнение итераторов на равенство и неравенство;

    4. сдвиг на соседний элемент с помощью операции инкремента(декремента).

  6. Цикл для перебора контейнера с использованием итератора.

container cont1;

container::iterator it1;

it1=cont1.begin();

while (it1!=cont1.end())

{

it1++;

}

  1. Типы итераторов в STL: входные, выходные, прямые, двунаправленные, итераторы произвольного доступа.

  2. Функции-члены, общие для всех контейнеров:

    1. операторы равенства (==)и неравенства (!=);

    2. оператор присваивания (=);

    3. удаление всех элементов (clear);

    4. добавление элемента или диапазона элементов на заданную позицию (insert);

    5. удаление элемента или диапазона элементов (erase);

    6. число элементов в контейнере (size);

    7. максимально допустимый размер контейнера (max_size);

    8. проверка на пустоту контейнера (empty);

    9. итератор на начало контейнера (begin);

    10. итератор на конец контейнера (end);

    11. реверсивный итератор на конец контейнера;

    12. реверсивный итератор на начало контейнера.

  3. Для контейнера vector эффективными являются операции доступа к произвольному элементу, добавление элемента в конец, удаление элемента с конца, т. к. ячейки памяти, выделенные под элементы будут иметь подряд идущие адреса.

  4. Для контейнера list эффективными будут операции вставки и удаления в произвольной позиции, т. к. для этого нужно только поменять значения 4-х указателей, не перемещая элементы контейнера в памяти.

  5. Для контейнера deque эффективными будут те же операции, что и для контейнера vector, а также вставка и удаление первого элемента.

  6. Функции-члены последовательного контейнера vector:

    1. push_back(T& key) добавление в конец;

    2. pop_back() удаление с конца;

    3. insert вставка в произвольное место;

    4. erase удаление из произвольного места;

    5. [] доступ к произвольному элементу;

    6. swap обмен векторов;

    7. clear очистка вектора;

  7. Функции-члены последовательного контейнера list:

    1. push_back(T& key) добавление в конец;

    2. pop_back() удаление с конца;

    3. push_front(T& key) добавление в начало;

    4. pop_front() удаление из начала;

    5. insert вставка в произвольное место;

    6. erase удаление из произвольного места;

    7. swap обмен списков;

    8. clear очистка списка;

    9. splice сцепка списков.

  8. Функции-члены последовательного контейнера deque:

    1. push_back(T& key) добавление в конец;

    2. pop_back() удаление с конца;

    3. insert вставка в произвольное место;

    4. erase удаление из произвольного места;

    5. push_front(T& key) добавление в начало;

    6. pop_front() удаление из начала;

    7. [] доступ к произвольному элементу;

  9. Удаление из вектора элементов со 2 по 5:

v.erase(v.begin()+1,v.begin()+4);

  1. Удаление из вектора последнего элемента:

v.pop_back();

  1. Удаление из списка элементов со 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);

  1. Удаление из списка последнего элемента:

lst.pop_back();

  1. Удаление из очереди элементов со 2 по 5:

dq.erase(dq.begin()+1,dq.begin()+4);

  1. Удаление из очереди последнего элемента:

dq.pop_back();

  1. Печать последовательного контейнера

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;

}

}

  1. Адаптер контейнера – это контейнер, созданный на основе базового и реализующий часть его операций, необходимых для функционирования адаптера.

  2. stack<int> - стек по умолчанию, реализованный на базе двусторонней очереди, stack<int,list<int> > – стек на базе списка.

  3. Методы контейнера stack:

    1. push() добавление в конец;

    2. pop() удаление с конца;

    3. top() – получение последнего элемента;

    4. empty() – проверка, является ли стек пустым;

    5. size() – размер стека.

  4. Методы контейнера queue:

    1. push() добавление в конец;

    2. pop() удаление из начала;

    3. front() – получение первого элемента очереди;

    4. back() – получение последнего элемента очереди;

    5. empty() – проверка, является ли очередь пустой;

    6. size() – размер очереди.

  5. Из очереди с приоритетом (priority_queue) для извлечения выбирается максимальный среди хранимых элементов,

  6. Непосредственно удалить из стека элемент с заданным номером нельзя. Для этого нужно последовательно извлечь все элементы до заданного, а затем добавить в обратном порядке все кроме него.

  7. Непосредственно удалить из очереди элемент с заданным номером нельзя. Для этого нужно последовательно извлечь все элементы очереди, а затем добавить в том же порядке все кроме заданного.

  8. Печать содержимого стека

template<class T>

void print_stack(stack<T> &st)

{

while (!st.empty())

{

cout<<st.top()<<” “;

st.pop();

}

cout<<endl;

}

  1. Печать содержимого очереди

template<class T>

void print_queue (stack<T> &q)

{

while (!q.empty())

{

cout<<q.front()<<” “;

q.pop();

}

cout<<endl;

}