Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи по програмуванні(14 лаб).doc
Скачиваний:
77
Добавлен:
16.05.2015
Размер:
1.43 Mб
Скачать

Завдання 3 Варіант 1. Задача “Банківське переведення” (дата, час, № рахунку, розмір рахунку).

Варіант 2. Задача “Студент” (прізвище, вік).

Варіант 3. Задача “Медична картка” (прізвище, вага).

Варіант 4. Задача “Результати хімічного досліду” (float, float).

Варіант 5. Задача “Результати хімічного досліду” (час, кількість речовини).

Варіант 6. Задача “Розклад” (№ рейсу та час відправлення).

Варіант 7. Задача “Успішність” (предмет, оцінка).

Варіант 8. Задача “Мобільний телефон” (час розмови, кількість грошей, № телефону).

Варіант 9. Задача “Кабельне телебачення” (кількість каналів, вартість, назва пакету).

Варіант 10. Задача “Мешканці” (прізвище, № квартири, № телефону).

Клас, що розробляється, повинен містити методи по обраним полям:

  • вставка;

  • сортування по полю;

  • сумування;

  • видалення.

Теоретичні відомості

В останніх версіях стандартних бібліотек, що базуються на стандарті для мови C++, утримується великий і вичерпний набір структур даних і функцій, заснованих на шаблонах Таке розширення стандартних бібліотек називається стандартною бібліотекою шаблонів (Standart Template library, STL). Ці структури даних містять шаблони класів для подання масивів, списків, карт (словників), стеків, черг, черг із пріоритетами та ін. Така стандартизація поліпшує мобільність і надійність програм, дозволяє швидко створювати надійні додатки й підтримувати їх з меншими зусиллями.

Всі класи бібліотеки STL розроблялися для спільного функціонування з більшим набором узагальнених алгоритмів (шаблонів функцій загального виду для маніпулювання контейнерами довільної природи). Такий поділ функцій (контейнери - зберігають дані, алгоритми - ними оперують) дозволило істотно скоротити обсяг бібліотеки, причому в багатьох випадках така реалізація виявляється більше ефективної в порівнянні з реалізаціями, заснованими на повній інкапсуляції даних і операцій.

Розглянемо основні поняття, використовувані в STL.

Приклад 1

#include "iostream.h"

#include <vector>

int main()

{

vector <int> v; // створення вектора нульовой довжини

int i;

cout <<”\n розмір = ” << v.size() << endl;

// заповнення вектора в кінець

for(i=0; i<10; i++) v.puch_back(i);

cout <<”\n новий розмір = ” << v.size() << endl;

for(i=0; i <10; i++) v.puch_back(i);

cout <<”\n новий зміст = \n ”;

for(i=0; i<10; i++) cout << v[i] << ” ”;

cout << endl;

//доповнення вектора новими елементами в кінець

for(i=0; i<10; i++) v.puch_back(i + 10);

cout <<”\n новий розмір = ” << v.size() << endl;

cout <<”\n поточний зміст = \n ”;

for(i=0; i< v.size(); i++) cout << v[i] << ” ”;

cout << endl;

// зміна значень вектора

for(i=0; i< v.size(); i++) v[i] = v[i]+ v[i];

cout <<”\n новий вектор: \n”;

for(i=0; i< v.size(); i++) cout << v[i] << ” ”;

cout << endl;

return 0;

}

Тестування:

розмір =0

новий розмір =10

новий зміст =

0 1 2 3 4 5 6 7 8 9

новий розмір =20

поточний зміст =

0 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19

новий вектор:

0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38

У бібліотеці виділяють три основних компонентів:

1. Контейнер (container) - зберігання набору об'єктів в пам'яті.

2. Ітератор (iterator) - забезпечення засобів доступу до вмісту контейнера.

3. Алгоритм (algorithm) - визначення обчислювальної процедури.

До контейнерів відносять:

  • vector - колекція елементів Т, збережених в масиві, збільшується в міру необхідності. Для того, щоб почати використання даної колекції, увімкніть # include <vector>.

  • list - колекція елементів Т, збережених, як двонаправлений зв'язаний список. Для того, щоб почати використання даної колекції, увімкніть # include <list>.

  • map - це колекція, яка зберігає пари значень pair <const Key, T>. Ця колекція призначена для швидкого пошуку значення T по ключу const Key. В якості ключа може бути використано все, що завгодно, наприклад, рядок або int але при цьому необхідно пам'ятати, що головною особливістю ключа є можливість застосувати до нього операцію порівняння. Швидкий пошук значення по ключу здійснюється завдяки тому, що пари зберігаються в відсортованому вигляді. Ця колекція має відповідно і недолік - швидкість вставки нової пари назад пропорційна кількості елементів, збережених в колекції, оскільки просто додати нове значення в кінець колекції не вийде. Ще одна важлива річ, яку необхідно пам'ятати при використанні даної колекції - ключ повинен бути унікальним. Для того, щоб почати використання даної колекції, увімкніть # include <map>. Якщо ви хочете використовувати дану колекцію, щоб уникнути дублікатів, то ви уникнете їх тільки по ключу.

  • set - це колекція унікальних значень const Key - кожне з яких є також і ключем - тобто, простіше кажучи, це відсортована колекція, призначена для швидкого пошуку необхідного значення. До ключу пред'являються ті ж вимоги, що й у випадку ключа для map. Природно, використовувати її для цієї мети немає сенсу, якщо ви хочете зберегти в ній прості типи даних, щонайменше вам необхідно визначити свій клас, який зберігає пару ключ - значення і визначає операцію порівняння по ключу. Дуже зручно використовувати дану колекцію, якщо ви хочете уникнути повторного збереження одного і того ж значення. Для того, щоб почати використання даної колекції, увімкніть # include <set>.

  • multimap - це модифікований map, в якому відсутня вимоги унікальності ключа - тобто, якщо ви справите пошук по ключу, то вам повернеться не одне значення, а набір значень, збережених з даним ключем. Для того, щоб почати використання даної колекції увімкніть # include <map>.

  • multiset - те ж саме відноситься і до цієї колекції, вимоги унікальності ключа в ній не існує, що призводить до можливості зберігання дублікатів значень. Тим не менш, існує можливість швидкого знаходження значень по ключу у випадку, якщо ви визначили свій клас. Оскільки всі значення в map і set зберігаються в відсортованому вигляді, то виходить, що в цих колекціях ми можемо дуже швидко відшукати необхідне нам значення по ключу, але при цьому операція вставки нового елемента T буде коштувати нам дещо дорожче, ніж наприклад в vector. Для того, щоб почати використання даної колекції, увімкніть # include <set>.