
- •Лабораторна робота №1
- •Порядок виконання роботи
- •Завдання 1
- •Завдання 2
- •Завдання 3
- •Теоретичні відомості Масиви динамічної пам'яті
- •Приклад виконання завдання 1
- •Лістинг програми
- •Приклад виконання завдання 2
- •Лістинг програми
- •Приклад виконання завдання 3
- •Лістинг програми
- •Контрольні запитання
- •Лабораторна робота №2
- •Порядок виконання роботи
- •Завдання 1
- •Завдання 2
- •Теоретичні відомості Читання і запис текстових файлів
- •Читання і запис бінарних файлів
- •Відкриття бінарних файлів
- •Файли з послідовним доступом
- •Запис даних у файл з послідовним доступом
- •Файли з довільним доступом
- •Приклад виконання завдання 1
- •Приклад виконання завдання 2
- •Контрольні запитання
- •Лабораторна робота №3
- •Порядок виконання роботи
- •Завдання 1
- •Завдання 2
- •Завдання 3
- •Теоретичні відомості
- •Обмеження доступу до членів класу
- •Специфікатори доступу
- •Вбудовані функції-члени
- •Приклад виконання завдання 1.
- •Приклад виконання завдання 2.
- •Приклад виконання завдання 3.
- •Контрольні запитання
- •Лабораторна робота №4
- •Порядок виконання роботи
- •Завдання 2
- •Теоретичні відомості Конструктори і деструктори
- •Правила роботи з конструкторами і деструкторами
- •Варіант 10. Розробити описовий алгоритм, схему алгоритму і написати метод для підрахування кількості слів в текстовому файлі.
- •Приклад виконання завдання 2
- •Контрольні запитання
- •Лабораторна робота №5
- •Порядок виконання роботи
- •Завдання 1
- •Завдання 2
- •Теоретичні відомості Принципи спадкування в ооп
- •Оголошення похідних класів
- •Конструктори похідного класу
- •Функції члени похідного класу
- •Заборонені члени класу (Protected)
- •Приклад виконання Завдання 1
- •Контрольні запитання
- •Лабораторна робота №6
- •Порядок виконання роботи
- •Завдання 1
- •Теоретичні відомості Перевантаження операторів
- •Приклад виконання завдання 1
- •Приклад виконання завдання 2
- •Приклад виконання завдання 3
- •Приклад виконання завдання 4
- •Контрольні запитання
- •Лабораторна робота №7
- •Порядок виконання роботи
- •Завдання 1.
- •Завдання 2.
- •Теоретичні відомості
- •Структура наслідування класів
- •Постановка задачі
- •Розробити клас трикутника, чотирикутника, кола, точки
- •Контрольні запитання
- •Лабораторна робота №8
- •Порядок виконання роботи
- •Завдання 1
- •Контрольні запитання
- •Лабораторна робота №9
- •Порядок виконання роботи
- •Завдання 1
- •Теоретичні відомості Множинне спадкування
- •Контрольні запитання
- •Лабораторна робота №10
- •Порядок виконання роботи
- •Завдання 1
- •Теоретичні відомості Шаблони
- •Параметризовані класи
- •Визначені об’єкти-потоки
- •Операції поміщення та вилучення
- •Приклад виконання Завдання з варіанту 2
- •Контрольні запитання.
- •Лабораторна робота №11
- •Порядок виконання
- •Завдання 1
- •Завдання 2
- •Завдання 3 Варіант 1. Задача “Банківське переведення” (дата, час, № рахунку, розмір рахунку).
- •Ітератори
- •Для роботи з вектором необхідно:
- •Приклад роботи з вектором
- •Алгоритми
- •Застосування алгоритмів до вектора
- •Приклад 1 виконання Завдання 1
- •Приклад 2 виконання Завдання 2
- •Приклад 3 виконання завдання №3
- •Контрольні запитання
- •Завдання 1
- •Теоретичні відомості Приклад розробки програми
- •Контрольні запитання
- •Лабораторна робота №13
- •Порядок виконання
- •Завдання 2.
- •Теоретичні відомості
- •Стандартні потоки для базових класів
- •Форматування даних при обмінах з потоками
- •Маніпулятори
- •Приклад розробки програми
- •Контрольні запитання
- •Лабораторна робота №14
- •Порядок виконання
- •Завдання
- •Теоретичні відомості
- •Контрольні запитання
Для роботи з вектором необхідно:
1. Підключити заголовний файл
# Include "vector"
2. Оголосити робочу область:
using namespace std;
3. Оголосити вектор:
це можна зробити двома способами.
vector <int> vArray1;
vector <int> vArray2 (30);
У першому випадку вказується порожній вектор, а в другому початковий розмір.
4. Ініціалізація вектора
vector vVec (5,10);
for (int x = 0; x <5; x + +)
cout << vVec [x] << endl;
Для отримання інформацію про параметри вектора:
* Size () - скільки даних зберігатися
* Capacity () - скільки може зберігатися до зміни розміру
* Max_size () - максимальний розмір звичайно дорівнює найбільш великим доступному блоку пам'яті
Приклад роботи з вектором
1. Заповнити частину вектора необхідними даними.
У даному прикладі перші три елементи заповнюються цифрою два:
vVec.assign (3,2);
for (x = 0; x <5; x + +)
cout << vVec [x] << endl;
2. Отримати перший і останній елемент вектора, для цього є функції front () і back ().
vVec.assign (5,1);
vVec [0] = 0;
vVec [4] = 4;
cout << vVec.front () << "" << vVec.back () << endl;
3. Вставку елемента з переміщенням можна зробити функцією insert. Вставка проводиться в першу позицію з переміщенням елементів вниз.
for (x = 0; x <5; x + +)
cout << vVec [x] << "";
cout << endl;
vVec.insert (vVec.begin (), 25);
for (x = 0; x <6; x + +)
cout << vVec [x] << "";
cout << endl;
4.Поместіть число в кінець вектора скориставшись функцією push_back ():
vVec.push_back (99);
for (x = 0; x <7; x + +)
cout << vVec [x] << "";
cout << endl;
5. Видалити останній елемент зі скороченням розміру:
vVec.pop_back ();
for (x = 0; x <vVec.size (); x + +)
cout << vVec [x] << "";
cout << endl;
6. Для видалення используеться функція erase ():
vVec.erase (vVec.begin () +2, vVec.begin () +4);
for (x = 0; x <vVec.size (); x + +)
cout << vVec [x] << "";
cout << endl;
7. Для зміни розміру вектора используеться функція resize ():
vVec.resize (3);
for (x = 0; x <vVec.size (); x + +)
cout << vVec [x] << "";
cout << endl;
8. Заповнення масиву:
for (i = 0; i <n; i + +) for (i = 0; i <n; i + +)
v.puch_back (rand ()); v.puch_back (rand ()% 10);
9.Вставка елемента:
cout << "\ n Enter pos_ins"; cin >> pos_ins;
vector <char> :: iterator ch_p = ch.begin ();
ch_p = ch_p + pos_ins;
cout << "\ n Enter new_elem ="; cin >> new_elem;
if (pos_ins> = 0 && pos_ins <= ch.size ())
{Ch.insert (ch_p, 1, new_elem);}
10.Видалення елемента:
cout << "\ n Enter pos_ins"; cin >> pos_ins;
cout << "\ n size =" << ch.size ();
if (pos_ins> = 0 && pos_ins <= ch.size ())
{Ch.erase (ch.begin () + pos_ins, ch.begin () + pos_ins + 1)
Алгоритми
До цього ми подивилися основні прийоми використання STL колекцій на прикладі використання вектора. Це основа STL, але для того, щоб по - справжньому використовувати всю міць цієї бібліотеки, доведеться розширити наші знання. З використанням алгоритмів можливе створення дуже потужних і ефективних програм. За компактності такий код перевершує код, написаний на таких сучасних мовах, як Java і С #, і в значній мірі ефективніше останнього.
STL - алгоритми представляють набір готових функцій, які можуть бути застосовані до STL колекціям і можуть бути поділені на три основних групи (табл.11.1).
Таблиця 11.1 - Алгоритми бібліотеки стандартних шаблонів
Алгоритм |
Призначення |
adjacent_find () |
Виконує пошук суміжних парних елементів у послідовності. Повертає ітератор першої пари. |
binary_search () |
Виконує бінарний пошук в упорядкованій послідовності. |
copy () |
Копіює послідовність. |
copy_backward () |
Аналогічна функції copy(), за винятком того, що переміщає в початок послідовності елементи з її кінця. |
count () |
Повертає число елементів в послідовності. |
count_if () |
Повертає число елементів в послідовності, що задовольняють деякому предикату. |
equal () |
Визначає ідентичність двох діапазонів. |
equal_range () |
Повертає діапазон, в який можна вставити елемент, не порушивши при цьому порядок проходження елементів у послідовності. |
fill () fill_n () |
Заповнює діапазон заданим значенням.
|
find () |
Виконує пошук діапазону для значення та повертає перший знайдений елемент. |
find_end () |
Виконує пошук діапазону для підпослідовності. Функція повертає ітератор кінця підпослідовності в середині діапазону. |
find_first_of () |
Знаходить перший елемент в середині послідовності, парний елементу в середині діапазону. |
find_if () |
Виконує пошук діапазону для елемента, для якого певний користувачем унарний предикат повертає істину. |
for_earch () |
Призначає функцію діапазону елементів. |
generate () generate_n () |
Привласнює елементам у діапазоні значення, що повертаються породжуючою функцією. |
includes () |
Визначає, чи включає одна послідовність всі елементи іншої послідовності. |
inplace_merge () |
Виконує злиття одного діапазону з іншим. Обидва діапазони повинні бути відсортовані в порядку зростання елементів. Результуюча послідовність сортується. |
iter_swap () |
Міняє місцями значення, на які вказують два ітератора, що є аргументами функції. |
lexicographical_compare () |
Порівнює дві послідовності за абеткою.
|
lower_bound () |
Виявляє перше значення в послідовності, що не менше заданого значення. |
make_heap () |
Виконує пірамідальне сортування послідовності (піраміда, англійською мовою heap - повне двійкове дерево, що володіє тією властивістю, що значення кожного вузла не менше значення кожного з його дочірніх вузлів). |
max () |
Повертає максимальне із двох значень. |
max_element () |
Повертає ітератор максимального елемента в середині діапазону. |
merge () |
Виконує злиття двох упорядкованих послідовностей, а результат розміщає в третій послідовності. |
min () |
Повертає мінімальне із двох значень. |
min_element () |
Повертає ітератор мінімального елемента в середині діапазону. |
mismatch () |
Виявляє першу розбіжність між елементами у двох послідовностях. Повертає ітератори обох незбіжних елементів. |
next_permutation () |
Утворює наступну перестановку (permutation) послідовності. |
nth_element () |
Упорядковує послідовність таким чином, щоб всі елементи, менші заданого елемента Е, розташовувалися перед ним, а всі елементи, більші заданого елемента Е, - після нього. |
partial_sort () |
Сортує діапазон. |
partial_sort_copy () |
Сортує діапазон, а потім копіює стільки елементів, скільки ввійде в результуючу послідовність. |
partition () |
Упорядковує послідовність таким чином, щоб всі елементи, для яких предикат повертає істину, розташовувалися перед елементами, для яких предикат повертає “неправду”. |
pop_heap () |
Міняє місцями перший і попередній перед останнім елементи, а потім відновлює піраміду. |
prev_permutation () |
Утворить попередню перестановку послідовності. |
push_heap () |
Розміщує елемент на кінці піраміди. |
random_shuffle () |
Безладно перемішує послідовність. |
remove () remove_if () remove_copy () remove_copy_if () |
Видаляє елементи із заданого діапазону.
|
replace () replace_if () replace_copy () replace_copy_if () |
Заміняє елементи в середині діапазону.
|
reverse () reverse_copy () |
Змінює порядок сортування елементів діапазону на зворотній. |
rotate () |
Виконує циклічне переміщення вліво елементів у діапазоні. |
rotate_copy () | |
search () |
Виконує пошук підпослідовності в середині послідовності. |
search_n () |
Виконує пошук послідовності заданого числа однакових елементів. |
set_difference () |
Створює послідовність, яка містить ділянки, що розрізняються, двох упорядкованих наборів. |
set_intersection () |
Створює послідовність, що містить однакові ділянки двох упорядкованих наборів. |
set_symmetric_difference () |
Створює послідовність, що містить симетричні ділянки, що розрізняються, двох упорядкованих наборів. |
set_union () |
Створює послідовність, що містить об'єднання (union) двох упорядкованих наборів. |
sort () |
Сортує діапазон. |
sort_heap () |
Сортує піраміду усередині діапазону. |
stable_partition () |
Упорядковує послідовність таким чином, щоб всі елементи, для яких предикат повертає істину, розташовувалися перед елементами, для яких предикат повертає “неправду”. Розбивання на розділи залишається постійним; відносний порядок розташування елементів послідовності не змінюється. |
stable_sort () |
Сортує діапазон. Однакові елементи не переставляються. |
swap () |
Міняє місцями два значення. |
swap_ranges () |
Міняє місцями елементи в діапазоні. |
transform () |
Призначає функцію діапазону елементів і зберігає результат у новій послідовності. |
unique () |
Видаляє повторювані елементи з діапазону. |
unique_copy () |
Виявляє останнє значення в послідовності, що не більше деякого значення. |
upper_bound () |