SlideShare a Scribd company logo
1 of 55
Download to read offline
АМО.L9
(L9.0)
Іспит: (42 + 42) / 2 + (28 V 28) * kзахист
M1:Вступ. Поняття моделі
обчислень та алгоритму.
• Історія поняття алгоритму.
• Хронологія теорії алгоритму.
• Визначення алгоритму.
• Основні вимоги до алгоритму.
• Основні етапи повної побудови алгоритму.
• Методи представлення алгоритму.
• Методи проектування алгоритму.
• Оцінка коректності алгоритму.
• Введення в теорію алгоритмів.
• Формалізація поняття алгоритму.
M1: Частина 1. Тема №1. Методи
синтезу та способи відображення
алгоритмів. Підходи при синтезі
алгоритмів(алгоритмічні стратегії).
• Графічне відображення алгоритму.
• Відображення алгоритму за допомогою ПГА.
• Метод “розділяй і пануй”.
• Повний перебір.
• Динамічне програмування.
• Скупі алгоритми.
• Бектрекінг (перебір з поверненням).
• Метод гілок і границь.
• Ймовірністні алгоритми.
• Алгоритми локального пошуку.
M1: Частина 1. Тема №2. Основи
аналізу алгоритмів.
• Оцінка розміру вхідних даних.
• Складність по пам’яті.
• Складність по часу виконання алгоритму.
• Порівняння найкращих, середніх та найгірших оцінок.
• Ріст функцій.
• О-, о-, W-, ω-, Q- нотації.
• Стандартні класи ефективності алгоритмів.
• Математичний аналіз нерекурсивних алгоритмів.
• Рекурсивні алгоритми.
• Математичний аналіз рекурсивних алгоритмів.
• Емпиричний аналіз алгоритмів.
M1: Частина 1. Тема №3. Базові
алгоритми обробки інформації.
3.1. Алгоритми пошуку.
• Послідовний пошук
• Бінарний пошук.
• Пошук в лінійних списках.
• Задача вибору.
• Дерева бінарного пошуку.
• Збалансовані дерева.
• Вичерпний пошук.
• Хешування.
• Розв’язання колізій при хешуванні відкритою адресацією та
методом ланцюжків.
• Порозрядний пошук.
• Зовнішній пошук.
M1: Частина 1. Тема №3. Базові
алгоритми обробки інформації.
3.2. Алгоритми сортування даних.
• Сортування вибором.
• Сортування вставками.
• Сортування обміном.
• Сортування злиттям.
• Сортування Шелла.
• Швидке сортування.
• Пірамідальне сортування.
• Порозрядне та бітове сортування.
• Методи сортування спеціального призначення.
• Мережі сортування.
• Зовнішне сортування.
M1: Частина 1. Тема №3. Базові
алгоритми обробки інформації.
3.3. Алгоритми порівняння зі взірцем.
• Алгоритм Рабіна-Карпа.
• Пошук підрядків за допомогою скінчених
автоматів.
• Алгоритм Кнута-Морріса-Пратта.
• Алгоритм Бойєра-Мура.
• Наближене порівняння рядків.
M1: Частина 1. Тема №3. Базові
алгоритми обробки інформації.
3.4. Чисельні алгоритми.
• Матриці та дії з ними.
• Множення матриць по Винограду та по Штрассену.
• Робота з довгими числами.
• Алгебраїчні системи.
• Розв’язок систем лінійних рівнянь.
• Розв’язання нелінійних рівнянь.
• Многочлени та швидке перетворення Фур’є.
• Алгоритми апроксимації і інтерполяція чисельних
функцій.
M1: Частина 1. Тема №3. Базові
алгоритми обробки інформації.
3.5. Графи та мережеві алгоритми.
• Пошук у графі.
• Породження всіх каркасів графа.
• Каркас мінімальної ваги.
• Метод Дж. Краскала.
• Метод Р. Пріма.
• Досяжність. Визначення зв’язності. Двозв’язність.
• Ейлерові цикли.
• Гамільтонові цикли.
• Фундаментальна множина циклів.
• Алгоритм Дейкстри
• Алгоритм Флойда.
• Метод генерації всіх максимальних незалежних множин графа.
• Задача про найменше покриття.
• Задача про найменше розбиття.
• Розфарбування графа.
• Пошук мінімального розфарбування вершин графа.
• Використання задачі про найменше покриття при розфарбуванні вершин графа.
• Потоки в мережах.
• Метод побудови максимального потоку в мережі.
• Методи наближеного рішення задачі комівояжера(метод локальної оптимізації, алгоритм Эйлера,
алгоритм Крістофідеса).
• Аналіз алгоритм на графах.
M1: Частина 1. Тема №3. Базові
алгоритми обробки інформації.
3.6. Паралельні та розподілені алгоритми.
• Модель паралельного виконання програми зі
спільною пам’яттю і модель передачі повідомлень.
• Організація паралельних обчислень відповідно до
принципу консенсусу і на основі вибору.
• Методи визначення завершення паралельних
обчислень.
• Паралельний пошук.
• Паралельне сортування.
• Паралельні чисельні алгоритми.
• Паралельні алгоритми на графах.
Рівні проектування цифрових систем
• SW: Application
• SW: C++ Boost
• SW: C++ STL
• SW: C++11
• SW: C++
• SW: C
• SW: Assembler SW
----------------------------------------------------------------------------------------------------
• (TLM)HW: SystemC/SystemVerilog (Architecture, CE) HW
• (RTL)HW: VHDL/Verilog (Logic Circuit, CE)(1)
• HW: VHDL/Verilog (Logic Circuit, CE)(2)
• HW: SPICE/Verilog (Logic Circuit, EE)(1)
• HW: SPICE (Logic Circuit, EE)(2)
• HW: SPICE/GDSII (Logic Circuit, EE-PD)
---------------------------------------------------------------
• (DFM)HW: GDSII (Logic Circuit, EE-PD)
A
||
||
||
||
||
||
||
||
||
||
||
||
||
||
||
||
||
Еволюція С++
Еволюція С++
Під впливом STL виникли:
Альтернативні підходи:
АМО.L9
(L9.1)
БібліотекаБібліотека STLSTL
БібліотекаБібліотека STLSTL
• Бібліотека стандартних шаблонів (БСШ- STL- standart template library) не
входила у вихідну специфікацію С++, а була добавлена розробниками пізніше.
• БСШ забезпечує загальноцільові, стандартні класи і функції, реалізовує
найбільш важливі алгоритми і структури даних. Оскільки вона будується на
основі класів-шаблонів, алгоритми, які в неї входять, можуть бути застосовані
практично до будь-яких типів даних, які допускаються в С++.
• Використання засобів БСШ дозволяє суттєво підвищити надійність
програм, їх універсальність, а також суттєво зменшити терміни розробки програм.
• Ядро БСШ складають три основні елементи:
1. контейнери,
2. aлгоритми,
3. ітератори.
• Ці елементи взаємно функціонують, забезпечуючи при цьому вирішення
поставлених задач.
ДДодатковіодаткові методиметоди
• Додатково до контейнерів, алгоритмів та ітераторів у STL підтримується ще декілька стандартних
компонентів. Головними серед них є розподільники пам’яті (allocators), предикати
(predicates) та функції порівняння (comparison functions).
• У кожного контейнера є визначений для нього розподільник пам’яті або алокатор. Алокатори
керують процесом розподілу пам’яті. По замовчуванню розподільником пам’яті є об’єкт класу
allocator, який оголошений у ФЗ <memory.h>. Конструктор цього класу генерує виклик функції
побудованої на основі шаблону allocate з цього ж ФЗ. Наведемо прототип цієї функції-шаблону
 template <class T> inline T* allocate (int size, T*);
• Тут T - тип одного елемента-блока; size - кількість блоків. Повертає шаблон адресу виділеної через
оператор new пам’яті.
• У більшості випадків достатньо розподільника, який задається по замовчуванні,але можна
визначити і власний розподільник пам’яті.
• В деяких алгоритмах і контейнерах використовуються функції особливого типу, які називаються
предикатами. Предикат може бути бінарним або унарним. Унарний предикат має один аргумент,
бінарний- два. Аргументи бінарного предикату завжди розташовані по-порядку. Тип аргументів
предикатів відповідає типу об’єктів, які зберігаються в контейнері.
• Повертають предикати булівське значення. Проте точні умови повернення значення
предикатом повинні визначатись розробником. Як правило, існує два типи для оголошення
предикатів: UnPred - для унарного і BinPred- для бінарного.
• В деяких алгоритмах і класах використовується спеціальний тип бінарного предиката, який
призначений для порівняння двох елементів контейнера. Такий предикат називається функцією
порівняння. Функція порівняння повертає істину, якщо її перший аргумент менший за другий.
• Найбільш поширеним предикатом є функція порівняння двох елементів Comp, яка повертає true
при умові, що перший елемент менший за другий.
ККooнтейнеринтейнери
• Контейнери (containers) - це об’єкти, які призначені для зберігання інших об’єктів. Контейнери бувають різних
видів. Так у класі-шаблоні vector визначається динамічний масив, а в класі list - лінійний список. Загалом БСШ містить
контейнери, які реалізовують основні структури даних, які використовуються при написанні програм - вектори,
двонаправлені черги, списки і ії різновиди, словники (пари) і множини.
• Умовно контейнери можна розбити на два типи: послідовні і асоціативні.
• Послідовні контейнери (serial containers) забезпечують зберігання скінченного числа однотипних елементів у
вигляді неперервної послідовності. До таких контейнерів відносять вектори, двонаправлені черги і списки, а також
так звані адаптери, тобто контейнери, які реалізовують стеки, черги і черги з пріоритетами.
• Асоціативні контейнери (associative containers) дозволяють за допомогою ключів (keys) отримати швидкий
доступ до значень, які зберігаються у контейнері. Наприклад, у класі map визначається асоціативний список, який
забезпечує доступ до значень за допомогою унікальних ключів. Тобто в асоціативних списках зберігаються пари
ключ/значення, що дозволяє при наявності ключа отримати відповідне значення.
• Існує п’ять типів асоціативних контейнерів: словники (набори пар), словники з дублюванням або пари з не
унікальними ключами, множини, не унікальні множини і бітові множини (масиви, набори).
• Синтаксично контейнер є класом-шаблоном. Ці шаблони забезпечують стандартизований інтерфейс для різних
контейнерів.
• Оскільки імена типів елементів, які входять в оголошення класу-шаблону можуть бути найрізноманітнішими, то у
контейнерах за допомогою зарезервованого слова typedef оголошуються деякі узгоджені версії цих типів. Це
дозволяє конкретизувати імена типів.
• У кожному контейнері визначений набір функцій для роботи з цим контейнером. Так, наприклад, список містить
функції для вставлення, знищення і об’єднання елементів. В контейнері стек є функції для розміщення елемента і
виштовхування його з контейнера.
#include <iostream>
#include <vector>
using namespace std;
vector<int> mas;
main(){
cout<<"Введіть розмір масиву ";
int sz;
cin>>sz;
int val;
for(int i=0;i<sz;i++)
{
cout<<"Введіть "<<i<<" елемент";
cin>>val;
// додавання елементів в масив
mas.push_back(val);
}
cout<<"Перший елемент: "<<mas[0];
}
НабірНабір контейнерівконтейнерів STLSTL
<vector>векторvector
<stack>стекstack
<set>множина унікальних елементівset
<queue>чергаqueue
<queue>черга з пріорітетомpriority_queue
<set>множина елементівmultiset
<map>асоціативний список для зберігання пар ключ/значення. З
одним ключем може бути зв'язано декілька значень
multimap
<map>асоціативний список для зберігання пар ключ/значення. З
одним ключем зв'язано лише одне значення
map
<list>лінійний списокlist
<deque>двостороння чергаdeque
<bitset>набір бітівbitset
ФЗОписКонтейнер
СписокСписок типівтипів STLSTL
Узгоджене ім'я типу Опис
size_type Інтегральний тип, еквівалентний типу size_t
reference Посилання на елемент
const_reference Постійне посилання
iterator Ітератор
const_iterator Постійний ітератор
reverse_iterator Зворотній ітератор
const_reverse_iterator Постійний зворотній ітератор
value_type Тип значення в контейнері
allocator_type Тип розподільника пам’яті (алокатора)
key_type Тип ключа
key_compare Тип порівняння двох ключів
value_compare Тип порівняння двох значень
ПослідовніПослідовні контейнериконтейнери
• Вектор (vector), черги, двонаправлена чергa (deque), стек (stack) і список (list) складають
набір послідовних контейнерів STL.
• Вони підтримують різні набори операцій (методів), серед яких є такі що збігаються.
Операція Метод vector deque list
Вставка напочаток push_front() - + +
Видалення з початку pop_front() - + +
Вставка в кінець push_back() + + +
Видалення з кінця push_front() + + +
Вставка в довільному місці insert() + + +
Видалення з довільного місця erase() + + +
Довільний доступ до елемента [] . At + + -
Кількість елементів size() + + +
Максимальний розмір контейнера max_size() + + +
Булівська функція, яка визначає чи
контейнер є порожнім
empty() + + +
КонтейнерКонтейнер векторвектор ((vectorvector))
• Контейнер веrтор (vector) - це структура, яка ефективно реалізовує прямий доступ до елементів, додавання і
знищення з кінця. В контейнері vector підтримуються динамічні масиви, тобто масиви, розміри яких можуть збільшуватись
за потребою.
• Виділення фіксованого розміру пам’яті для масиву є більш ефективним. Водночас, воно є і найбільшим обмеженням,
оскільки не дозволяє адаптувати масив до змін, які виникають під час виконання програми. Вирішенням цієї проблеми є
використання контейнера вектор, який виділяє пам’ять під масив по мірі потреби. Незважаючи на те, що вектор за своєю
природою є динамічним масивом, для доступу до його елементів можна використовувати звичайну операцію індексації.
• Для будь-якого об’єкта, який зберігається у векторі повинен бути визначений конструктор по замовчуванню. Окрім цього,
повинні бути визначені також оператори порівняння < і == (для вбудованих типів усі вказані вимоги задовільняються
автоматично).
• Специфікація шаблону-класу vector має вид:
• template<class T, class Allocator = allocator<T>>class vector;
Тут T - тип значень (шаблонний тип), які будуть зберігатись у контейнері vector. Зарезервоване слово Allocator визначає
розподільник пам’яті, який по замовчуванню є стандартним.
• В класі vector є такі конструктори:
1. explicit* vector (const Allocator& a = Allocator());
2. explicit vector (size_type n, const T& значення = T(), const Allocator &a = Allocator());
3. vector (const vector<T, Allocator>& об’єкт);
4. template<class InIter>vector (InIter початок, InIter кінець, const Allocator &a=Allocator())
• Перша форма є конструктором порожнього вектора.
• Друга форма створює вектор довжиною n елементів, кожен з яких елемент рівний значенню. Параметр значення
приймає аргумент по замовчуванні, який для вбудованих типів є нульовим значенням. Для користувацьких типів
значення аргумента по замовчуванні визначається конструктором без параметрів для даного типу.
• Третя форма є конструктором копіювання.
• Четверта форма - це конструктор вектора, який створює вектор шляхом копіювання вказаного за допомогою ітераторів
діапазону значень.
#include <vector>
using namespace std;
class A {
public:
int i;
A(){i=0;}
A(int i){A::i=i;}
};
vector<int> v1; //1-форма
vector<int> v2(5); //2-форма
vector<int> v3(5,4); //2-форма
vector<int> v4=v3; //3-форма
vector<int> v5(v3); //3-форма
vector<int> v6(v2.begin(),v2.begin()+2);//4-форма
vector<A> v7(3); //2-форма
vector<A> v8(3, A(4)); //2-форма
ОператориОператори контейнераконтейнера vectorvector
• Для класу vector визначені оператори:
 оператор присвоєння = :
 vector<T>& operator= (const vector<T>&);
 оператор (функція-шаблон) порівняння на рівність == (рівність забезпечується
рівністю усіх відповідних пар елементів):
 template <class T> bool operator== (const vector<T>&, const
vector <T>&);
 оператор (функція-шаблон) порівняння на меньше < (один вектор вважається
меншим від іншого, якщо перший з елементів одного вектора є меншим від
відповідного елемента другого):
 template <class T> bool operator< (const vector<T>&, const
vector <T>&);
 оператор індексації [] :
 reference operator[] (size_type);
 const_reference operator[] (size_type) const;
• Окрім наведених визначено також операції !=, <=.
МетодиМетоди доступудоступу додо елементівелементів
контейнераконтейнера векторавектора
• Методи доступу до елементів вектора (окрім оператора []) :
 доступ до елементів вектора з перевіркою виходу за границю вектора (оператор індексації такої
перевірки не здійснює). У випадку виходу за границю контейнера генерується КС out_range
 reference at(size_type n);
 const_reference at(size_type n) const;
 вибірка першого елемента (посилання на елемент) контейнера
 reference front();
 const_reference front() const;
 вибірка останнього елемента контейнера
 reference back();
 const_reference back() const;
МетодиМетоди управлінняуправління обсягомобсягом
контейнераконтейнера vectorvector
• визначення розміру контейнеру
 size_type size() const;
• визначення максимально допустимого розміру контейнеру
 size_type max_size() const;
• зміна розміру контейнеру. Перший параметр задає новий розмір, другий параметр - значення,
які, у випадку збільшення розміру, будуть присвоюватись новим елементам контейнера. Нові
елементи будуть додаватись в кінець
• void resize (size_type,T c = T());
• визначення розміру пам’яті, яку займає контейнер
 size_type capacity() const;
• перевірка чи контейнер порожній
 bool empty() const;
• задання розміру пам’яті для контейнера
 void reserve(size_type);
МетодиМетоди змінизміни обоб’’єктівєктів контейнераконтейнера vectorvector
• додавання нового елемента в контейнер (в кінець)
 void push_back(const T&);
• знищення останнього елемента в контейнері
 void pop_back();
• додавання елемента, який задається другим параметром в контейнер в позицію, яка вказана першим параметром
 iterator insert (iterator, const T& = T());
 додавання n однакових елементів в позицію, яка вказана першим параметром
 void insert(iterator, size_type n, const T& = T());
 додавання елементів з діапазону, який задається другим та третім параметрами, в позицію, яка вказана першим
параметром
 template <class InputIterator> void insert(iterator, InputIterator, InputIterator);
• знищення елемента, який адресується параметром
 void erase(iterator);
• знищення елементів з діапазону, який задаєтьяс параметрами
 void erase(iterator, iterator);
• обмін елементами двома контейнерами
 void swap(vector<T>&);
• копіювання елементів, яке є аналогічне діє конструкторів другої та третьої форми
 template <class InputIterator> void assign(InputIterator first, InputIterator last);
 template <class Size, class T> void assign(Size n, const T& t = T());
ПрикладПриклад контейнераконтейнера vectorvector
#include <vector>
#include <iostream>
using namespace std;
// створити вектор нульової довжини
vector<int> v;
int main()
{
int i;
for(i=0; i<10; i++)
// додати елементи у вектор
v.push_back(i);
cout<<"Розмір: "<<v. size() <<endl;
for(i=0; i<v.size(); i++)
// вивід елементів вектора
cout<<i<<"-ий елемент"<<v[i]<<endl;
//ітератор на початок
vector<int>::iterator p=v.begin();
// ітератор на третій елемент
p+=2;
// вставити 10 елементів рівних 0
v.insert(p, 10, 0);
p=v.begin(); p+=4;
// знищити починаючи з 5-го 2 елемента
v.erase(p, p+2);
v.begin();
while(p!=v.end())
{
// вивід вмісту вектора через ітератор
cout<<*p<<" ";
p++;
};
return 0;
АсоціативніАсоціативні контейнериконтейнери
• Як вже відзначалось, асоціативні контейнери забезпечують швидкий доступ до даних за рахунок того, що
вони побудовані на основі збалансованих дерев пошуку (стандартом регламентується тільки інтерфейс
контейнера, а не їх реалізація).
• Асоціативні контейнери залежать від двох параметрів - Key (ключ) і Compare (відношення повного
впорядкування за ключем Key) . Контейнери set і multiset є “виродженими” асоціативними контейнерами, у
яких значення не є особливо важливими - усі операції здійснюються за допомогою ключів. Контейнер
шаблону set повинен складатись із унікальних ключів, а multiset - допускає дублювання ключів.
• Контейнери типу map і multimap елементами є пари значень, які складаються з об’єктів шаблонного типу T,
які, у свою чергу, зв’язані з об’єктами типу Key.
• Для зберігання пари “ключ-елемент” використовується шаблон pair, який описаний у ФЗ <utility>.
template <class T1, class T2> struct pair
{
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair (const T1& x, const T2& y);
template <class U, class V> pair(const pair<U,V>& p);
};
• Ітератори асоціативних контейнерів є двонапавленими. Оператори вставляння не впливають на коректність
ітераторів і посилання на елементи контейнера, а операція видалення анулює лише ітератори та посилання
на видалені елементи Окрім того, ітератори асоціативних контейнерів пересуваються по елементах
контейнера лише в порядку зростання ключів.
• Існуть такі асоціативні контейнери:
 унікальні словники (map),
 словники (multimap),
 унікальні множини (set),
 множини (multiset),
 бітові множини (bitset).
Операції, які є спільними для усіх
асоціативних контейнерів
Конструктори
AssociativeContainer () Створює порожній контейнер
AssociativeContainer (const Comparison& с) Створює порожній контейнер із заданим відношенням порівняння
AssociativeContainer (i, j) Створює контейнер ініціалізований діапазоном [i,j]
AssociativeContainer (i, j, с) Створює контейнер ініціалізований діапазоном [i,j] із заданим відношенням
порівняння
Доступ до елементів контейнера
iterator find(key) Здійснює пошук елемента за задним ключем, повертає ітератор на шуканий
елемент
const-iterator find(key)
iterator lower_bound(key) Повертає ітератор на перший знайдений за заданим ключем елемент
const iterator lower_bound(key)
iterator upper_bound(key) Повертає ітератор на наступний від знайденого за заданим ключем елемент,
ключ якого є більшим від ключа знайденого елемента
const iterator upper_bound(key)
pair<iterator, iterator> equal_range(key) Повертає пару ітераторів на перший та останній елементи, ключі яких рівні
заданому
size_t count(key) Повертає кількість елементів, які мають заданий ключ
Вставляння і видалення
pair<iterator,bool> insert(t) Вставляє елемент t. Повертає пару, яка складється з ітератора, який
посилається на елемент, що вставлявся, та логічне значення (true — вставляння
виконане, false — вставляння не виконане)
void insert(i,j) Вставляє в контейнер діапазон [i,j]
void erase(pos) Видаляє елемент, на який посилається ітератор pos
size_t erase(key) Видаляє елемент, який має ключ key
void erase(i,j) Видаляє діапазон [i,j]
Контейнер map
• Контейнер map - унікальний словник, або набір унікальних пар або асоціативний
список.
• Словник будується на основі пар значень. Перше значення є ключем для індентифікації
пари, а друге - саме значенням.
• Ключем може бути значення будь-якого типу. Але в контейнері map він є унікальним.
• Типовий заголовок шаблону map може бути таким
 template <class Key, class T, class Compare = less<Key> class Allocator
= allocator<pair<const Key, T>> > class map;
• Конструктори деструктор :
1. explicit map(const Compares comp = Compare(), const Allocator&=
Allocator());
2. template <class Inputlterator> map(Inputlterator first, Inputlterator
last, const Compares: comp = Compared, const Allocators = Allocator());
3. map (const map<Key, T, Compare, Allocator>&);
4. ~map();
• Перша форма конструктора створює порожній словник.
• Друга форма створює асоціативний список через задавання початку і кінця діапазона, а
також функцію присвоєння
 map<Key,T,Compare,Allocator>& operator=(const
map<Key,Т,Compare,Allocator>& x);
• Цей конструктор створює асоціативний список та ініціалізує його елементами x.
• Третя форма є конструктором копії.
• І, нарешті, шаблон map має деструктор, який знищує словник у пам’яті.
Операції над контейнером map
• зміна і визначення розміру об’єкта:
 визначення кількості елементів у словнику
– size_type size() const;
 визначення максимально кількості елементів у словнику
– size_type max_size() const;
 перевірка чи масив є порожнім. Якщо так, то повертається true. В противному випадку - false.
– bool empty() const;
• оператор доступу:
 доступ до елементів асоціативного списку забезпечується операторм індексації
– operator[](const key_type& x);
• операції вставляння:
• Вставляння елементів у словник здійснюється такими методами:
 вставляння елементу у контейнер і повернення пари, яка складається з ітератора і булівського значення.
Оскільки об’єкт шаблону map не допускає дублювання, то пара, яка повертається дозволяє визначити
успішність виконання операції, яка здійснюється. Якщо у словнику не існувало елемента із заданим
ключем, то булівська змінна (у парі, яка повертається) буде містити значення true, а ітератор буде
посилатись на вставлений елемент. Решту варіантів функції insert() не дозволяють з’ясувати чи виконане
вставляння
– pair<iterator, bool> insert(const value_type& x) ;
 вставляння елемента перед елементом, на який посилається ітератор position
– iterator insert(iterator position, const value_type& x);
 вставляння діапазона елементів, який визначається ітераторами first та last
– template <class Inputlterator> void insert(InputIterator first, Inputlterator last);
• операції знищення:
 знищення елемента, на який посилається ітератор position
– void erase(iterator position);
 знищення елемента по заданому ключу
– size_type erase (const key_type& x) ;
 заміна місцями елементів словника, який викликає метод, і аргумента
– void swap(map<Key, Т, Compare, Allocators);
 очищення словника (видалення усіх елементів)
– void clear();
Операції над контейнером map
• функтори порівняння:
 повертання функтора, який порівнює ключі
– key_compare key_comp() const;
 повертання функтора, який порівнює значення
– value_compare value_comp()const;
• операції пошуку:
 метод find()повретає ітератор, який встановлений на шукане значення. Якщо шуканого значення не
знайдено, то повертатиметься ітератор, який встановлений на значення поза межами контейнера. Пошук
здійснюється за ключем
– iterator find(const key_type& x);
– const_iterator find(const key_type& x) const;
 повертання кількості елементів, які мають заданий ключ
– size_type count(const key_type& x) const;
 повертання ітератора, який посилається на початок послідовності елементів, що мають заданий ключ
– iterator lower_bound(const key_type& x);
– iterator lower_bound(const key_type& x) const;
 повертання ітератора, який посилається на кінець послідовності елементів, що мають заданий ключ
– iterator upper_bound(const key_type& x);
– iterator upper_bound(const key_type& x) const;
 повертання пари, яка складається із ітераторів, які посилається на початок та кінець послідовності
елементів, що мають заданий ключ
– pair<iterator,iterator> equal_range(const key_type& x);
– pair<iterator,iterator> equal_range(const key_type& x) const;
Операції порівняння контейнера map
• оператор перевірки рівності двох словників. У випадку, якщо словники x і y складаються з однакових
елементів, то повертає значення true. Операція порівняння задається функтором Compare
– template <class Key, class T, class Compare, class Allocator> bool operator< (const map<Key,T, Compare,
Allocators x, const map<Key,T, Compare, Allocators y);
• оператор перевірки нерівності “менше” двох словників. У випадку, якщо словник x є меншим від словника y
, то повертає значення true. Операція порівняння задається функтором Compare
– template <class Key, class Т, class Compare, class Allocator> bool operator!= (const map<Key, T,
Compare, Allocators x, const map<Key,T, Compare, Allocators y) ;
• оператор перевірки рівності двох словників. У випадку, якщо словники x і y складаються з неоднакових
елементів, то повертає значення true. Операція порівняння задається функтором Compare
– template <class Key, class T, class Compare, class Allocator> bool operator ! = (const map<Key,T,
Compare, Allocators x, const map<Key,T, Compare, Allocators y) ;
• оператор перевірки нерівності “більше” двох словників. У випадку, якщо словник x є більшим від словника
y , то повертає значення true. Операція порівняння задається функтором Compare
– template <class Key, class Т, class Compare, class Allocator> bool operator> (const map<Key,T,Compare,
Allocators x, const map<Key,T,Compare, Allocators y);
• оператор перевірки нерівності “більше рівне” двох словників. У випадку, якщо словник x є більшим або
рівним словнику y , то повертає значення true. Операція порівняння задається функтором Compare
– template <class Key, class T, class Compare, class Allocator> bool operator>=(const map<Key,T,Compare,
Allocators x, const map<Key, T, Compare, Allocators y);
• оператор перевірки нерівності “менше рівне” двох словників. У випадку, якщо словник x є меншим або
рівним словнику y , то повертає значення true. Операція порівняння задається функтором Compare
– template <class Key, class T, class Compare, class Allocator> bool operator<=(const map<Key,T,Compare,
Allocators x, const map<Key,T,Compare, Allocators y);
• зміна місцями елементів словників x та y.
– template <class Key, class T, class Compare, class Allocator> void swap (map<Key, T, Compare, Allocators
x, map<Key, T, Compare, Allocators y);
Приклад контейнера map
#include <iostream>
#include <map>
#include <string>
using namespace std;
typedef map<int, char*, less<int> > MAP;
void print(MAP &Map);
void reverse_print(MAP &Map);
int main()
{
const int SIZE = 5;
char* NUMBERS[]={"One", "Two", "Three", "Four",
"Five"};
int i;
MAP::iterator where, newWhere;
// Порожні словники
MAP Map, newMap;
// Заповнення словника через функцію insert()
for (i = 0; i < SIZE; i++)
{
Map.insert(MAP::value_type(i,NUMBERS[i]));
newMap.insert(MAP::value_type(i,NUMBERS[i]));
}
printf("Словник Mapn");
print(Map);
printf("Словник newMapn");
print(newMap);
// Вивід вмісту словника у зворотньому порядку
printf("Словник Map у зворотньому порядкуn");
reverse_print(Map);
printf("Словник newMap у зворотньому порядкуn");
reverse_print(newMap);
// Вивід на екран розмірів словників
int MapSize = Map.size();
printf("Розмір словника Map = %dn", MapSize);
MapSize = newMap.size();
printf("Розмір словника newMap = %dn", MapSize);
// Вивід на екран максимальних розмірів словників
MapSize = Map.max_size();
printf("Максимальний розмір масиву Map = %dn",
MapSize);
MapSize = newMap.max_size();
printf("Макс. розмір масиву newMap = %dn",
MapSize);
// Вивід на екрант кількості п'ятірок
MapSize = Map.count(5);
printf("Кількість п'ятірок у наборі Map = %dn",
MapSize);
MapSize = newMap.count(4);
printf("Кількість 5 у наборі newMap = %dn",
MapSize);
// Шукаємо і видаляємо трійку в Map
where = Map.find(3);
Map.erase(where) ;
printf("Словник Map після видалення трійкиn");
print(Map);
// Видалення двох останніх елементів Map
where = Map.find(2);
Map.erase (where, Map.end() );
printf("Словник Map після видалення двох останніх
елементівn");
print(Map);
// Очищаємо Map за допомого функції clear()
Map.clear();
printf("Спроба вивести порожній словник n");
print(Map);
// Заповнюємо Map за допомогою методу insert
// Дублювання не допускається
for (i =0; i < 10; i++)
{
if(i<2) Map.insert(MAP::value_type(2,"Two"));
if(i<2 && i< 5)
Map.insert(MAP::value_type(7,"Seven"));
if(i>5) Map.insert(MAP::value_type(10,"Ten"));
}
printf("Новий словник Марn"); print(Map);
// Перестановка словників
swap(Map, newMap);
printf("Словник Map після обмінуn");
print(Map);
printf ("Словник newMap після обмінуn");
print(newMap);
// Діапазон, який складається з десяток
printf("Діапазон, який складається з десятокn");
for (where=newMap.lower_bound(10) ; where !=
newMap.end(); where++)
printf("(%d, %s) ", (*where).first,
(*where).second);
printf("n");
// Діапазон, який складається з двійок
printf("Діапазон, який складається з двійокn");
for (where=newMap.begin(); where!=
newMap.upper_bound(2); where++)
printf("(%d, %s)
",(*where).first,(*where).second);
printf("n");
// Діапазон, який складається з cемірок
printf("Діапазон, який складається з cемірокn");
for (where=newMap.equal_range(7).first;
where!= newMap.equal_range(7).second; where++)
printf("(%d, %s)
",(*where).first,(*where).second);
printf("n");
// Звертання до елементів словника
// через метод operator[] ()
printf ("operator [ ] n");
for(where=newMap.begin(); where!=newMap.end();
where++)
printf("(%d, %s) ",*where,
newMap[(*where).first]);
printf ("n");
// Порівняння словників
if (Map == newMap) printf("Map == newMapn");
if(Map > newMap) printf("Map > newMapn");
if(Map >= newMap) printf("Map >= newMapn");
if(Map < newMap) printf("Map < newMapn");
if(Map <= newMap) printf("Map <= newMapn");
return 0;
}
void print(MAP &Map)
{
if (Map.empty())
{
printf("%s n","Словник є порожнім");
return;
}
MAP::iterator i;
for(i = Map.begin(); i != Map.end(); i++)
printf("(%d, %s) ",(*i).first,(*i).second);
printf ("n");
}
void reverse_print(MAP &Map)
{
if (Map.empty())
{
printf ("%s n", "Словник є порожнім");
return;
}
MAP::reverse_iterator i;
for(i = Map.rbegin(); i!=Map.rend(); i++)
printf ("(%d, %s) ", (*i) .first, (*i) .second) ;
printf("n") ;
}
Алгоритми• Алгоритми (algorithms) виконують операції над вмістом контейнера (тобто над об’єктами контейнера).
• Існують найрізноманітніші алгоритми - від ініціалізації до заміни вмісту контейнера. Окрім цього, вони
дозволяють одночасно працювати з двома контенерами різних типів. Багато алгоритмів призначені для
роботи з послідовністю, яка є лінійним списком елементів всередині контейнера.
• Хоча кожен контейнер і підтримує власний набір операцій, проте існує набір стандартних алгоритмів, які
забезпечують більш широкі і комплексні дії. Використання стандартних алгоритмів пов’язане з
необхідністю підикання ФЗ <algorithm.h>.
• Усі алгоритми з <algorithm. h> є функціями-шаблонами. Це дає можливість використовувати їх з
контейнерами будь-яких типів. Наведемо приклад використання алгоритму, наприклад count. Його
реалізація в середовищі Borland C++ відрізняєтьтся від реалізації у специфікації Standart C++. А тому
приведемо прклади для обох версій мови.
• Прототип алгоритму count у версії Standart C++ має вигляд
 template <class InIter, class T> size_t count(InIter початок, InIter кінець, const
T& значення);
• Третій параметер значення є параметром на рівність якому порівнються усі елементи контейнера, а їх
кількість повертається алгоритмом.
#include <iostream>
#include <vector>
using namespace std;
vector<int> mas;
main(){
cout<<"Введіть розмір масиву ";
int sz;
cin>>sz;
int val;
for(int i=0;i<sz;i++){
cout<<"Введіть "<<i<<" елемент";
cin>>val;
mas.push_back(val); // додавання елементів в масив
}
int n = count(mas.begin(),mas.end(),1);
cout<<"Кількість елементів рівних 1 є "<<n;
}
КатегоріїКатегорії алгоритмівалгоритмів
for_each sort сору
find stable_sort copy_backward
find_end partial_sort swap_ranges
find_if partial_sort_copy swap
find_first_of nth_element iter_swap
adjacent_find lower_bound transform
count upper_bound replace
count_if equal_range replace_if
mismatch binary_search replace_copy
equal merge replace_copy_if
search inplace_merge fill
search_n includes fill_n
set_union generate
set_intersection generate_n
accumulate set_difference remove
inner_product set_symmetric_difference remove_if
partial_sum make_heap remove_copy
adjacent_difference push_heap remove_copy_if
pop_heap unique
sort_heap unique_copy
min reverse
max reverse_copy
min_element rotate
max_element rotate_copy
lexicographical_compare random_shuffle
next_permutation partition
prev_permutation
Алгоритми сортування та пошуку
Алгоритми, які не змінюють
вміст контейнерів Модифікуючі алгоритми
Чисельні алгоритми
ІтераториІтератори• Ітератори (iterators) - об’єкти, які по відношенню до контейнерів відіграють роль
вказівників. Вони дозволяють отримати доступ до елементів контейнерів,
аналогічно як вказівники використовуються для доступу до елементів масиву.
• Доступ до поточного елемента контейнера, подібно до вказівників,
здійснюється за операцій * і ->. Перехід до наступного елемента - за
допомогою операції інкремента. Для усіх ітераторів визначені також операції
присвоєння, перевірка на рівність і нерівність.
• Типом ітераторів оголошується тип iterator, який є визначеним у ФЗ
<iterator>. Окрім цього типу у ФЗ <iterator> описуються також ітераторні класи і
функції. При використанні стандартних контейнерів цей ФЗ підмикається
автоматично.
• Існує п’ять основних типів ітераторів (їх список наведений в таблиці).
Ітератор RandIter не підтримується контейнером list. Решта контейнерів
підтримують ітератори усіх типів.
• Бібліотека STL підтримує також так звані зворотні ітератори (reverse
iterators). Цими ітераторами можуть бути або bidirectional або random access
ітератори, які проходить послідовність елементів як у прямому так і у
зворотньому напрямках. Якщо зворотній ітератор вказує на останній елемент
послідовності, то його інкремент (++) приведе до вказування на передостанній.
#include <iostream>
#include <vector>
using namespace std;
vector<int> mas;
main(){
cout<<"Введіть розмір масиву ";
int sz;
cin>>sz;
int val;
for(int i=0;i<sz;i++){
cout<<"Введіть "<<i<<" елемент";
cin>>val;
mas.push_back(val); // додавання елементів в
масив
}
vector<int>::iterator p=mas.begin();
for(;p<mas.end();p++) cout<<" Елемент="<<*p;
}
Ітератор Опис Термін
Довільного доступу
(random access)
Використовується для
зчитування та запису значень.
Доступ до елементів довільний.
RandIter
Двонаправлений
(bidirectional)
Використовується для
зчитування та запису значень.
Може проходити контейнер в
обох напрямках.
BiIter
Однонаправлений
(forward)
Використовується аналогічно.
Може проходити контейнер
лише в одному напрямку.
ForIter
Вводу
(input)
Використовується для
зчитування значень. Може
проходити контейнер лише в
одному напрямку.
InIter
Виводу
(output)
Використовується для запису
значень. Може проходити
контейнер лише в одному
напрямку.
OutIter
 Ітератори можуть бути постійними. Такі ітератори використовуються тоді, коли треба заборонити зміну елемнтів в контейнері.
 Якщо ітератор вказує на конкретний елемент контейнера, то він вважається дійсним (ініціалізованим). В противному випадку - недійсним
(неініціалізованим). Ітератор може бути недійсним в таких випадках:
 ітератор не був ініціалізований;
 контейнер, з яким був зв’язаний ітератор, змінив розміри, або був знищений;
 ітератор вказує на кінець послідовності.
Кінець послідовності елементів контейнера є вказівником на елемент, який слідує за останнім елементом послідовності. Цей вказівник існує завжди.
Такий підхід дозволяє не розглядати порожню послідовність елементів як особливий випадок. Поняття “нульовий” ітератор не існує.
Ітератори утворють певну ієрархію в порядку
їх оголошення в таблиці. Очевидно, що
ітератор з більшими можливостями (який
стоїть вище в ієрархії) може
використовуватись замість ітератора з
меншими. Наприклад однонаправлений
ітератор може замінити ітератор вводу (тут
мається на увазі ввід/вивід значень у
контейнери).
АМО.L9
(L9.2)
БібліотекиБібліотеки BoostBoost
Boost
• Boost — набір бібліотек, які розширюють функціональність C++.
• Вільно поширюються за ліцензією Boost Software License разом
з сирцевим кодом.
• Бібліотеки boost є кандидатами на включення в наступний
стандарт C++.
• Деякі бібліотеки boost були включені стандарт C++ ще в 2011
році.
• При включенні бібліотеки в boost вона проходить кілька етапів
рецензування.
• Має власну систему “збирання” (Boost Build).
• У сучасній версії (1.66) в boost більше сотні бібліотек.
• Сирцевий код і документація доступні на https://www.boost.org .
Категорії бібліотеки Boost
• String and text processing
• Containers
• Iterators
• Algorithms
• Function objects and
higher-order programming
• Generic Programming
• Template
Metaprogramming
• Concurrent Programming
• Math and numerics
• Correctness and testing
• Data structures
• Domain Specific
• System
• Input/Output
• Memory
• Image processing
• Inter-language support
• Language Features Emulation
• Parsing
• Patterns and Idioms
• Programming Interfaces
• State Machines
• Broken compiler workarounds
• Preprocessor Metaprogramming
any
Assignment Library(assign)
function
bind
bind and function
lexical_cast
optional
static_assert
String Algorithms
variant
filesystem
ASIO
ASIO

More Related Content

Similar to l9

опорні схеми
опорні схемиопорні схеми
опорні схемиIrina Tabanets
 
тема 7
тема 7тема 7
тема 7cit-cit
 
02 Сортування включенням
02 Сортування включенням02 Сортування включенням
02 Сортування включеннямOleksii Molchanovskyi
 
Data Structures
Data StructuresData Structures
Data Structureseleksdev
 
Kiyanchuk r
Kiyanchuk rKiyanchuk r
Kiyanchuk rgarasym
 
Advanced c sharp part 3
Advanced c sharp part 3Advanced c sharp part 3
Advanced c sharp part 3eleksdev
 
Тема 10. Стандарти ANSI ASC X12, ISO 11179. Підтримка стандарту Дублінського ...
Тема 10. Стандарти ANSI ASC X12, ISO 11179. Підтримка стандарту Дублінського ...Тема 10. Стандарти ANSI ASC X12, ISO 11179. Підтримка стандарту Дублінського ...
Тема 10. Стандарти ANSI ASC X12, ISO 11179. Підтримка стандарту Дублінського ...Oleg Nazarevych
 
sql introduction
sql introductionsql introduction
sql introductioneleksdev
 
лекція 9
лекція 9лекція 9
лекція 9cit-cit
 
Вдосконалені алгоритми сортування
Вдосконалені алгоритми сортуванняВдосконалені алгоритми сортування
Вдосконалені алгоритми сортуванняAlexander Babich
 
Системний аналіз та імітаційне моделювання.ppt
Системний аналіз та імітаційне моделювання.pptСистемний аналіз та імітаційне моделювання.ppt
Системний аналіз та імітаційне моделювання.pptMaryLuchechko1
 
БазовI структури алгоритмiв. конструювання алгоритмiв
БазовI структури алгоритмiв. конструювання алгоритмiвБазовI структури алгоритмiв. конструювання алгоритмiв
БазовI структури алгоритмiв. конструювання алгоритмiвdnzcpto1
 
Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1Dmitry Chabanenko
 
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)Exoft LLC
 

Similar to l9 (20)

опорні схеми
опорні схемиопорні схеми
опорні схеми
 
тематична
тематичнатематична
тематична
 
тема 7
тема 7тема 7
тема 7
 
Excel urok 03_tema
Excel urok 03_temaExcel urok 03_tema
Excel urok 03_tema
 
02 Сортування включенням
02 Сортування включенням02 Сортування включенням
02 Сортування включенням
 
Data Structures
Data StructuresData Structures
Data Structures
 
Kiyanchuk r
Kiyanchuk rKiyanchuk r
Kiyanchuk r
 
Python for physicists. introduction
Python for physicists. introductionPython for physicists. introduction
Python for physicists. introduction
 
Advanced c sharp part 3
Advanced c sharp part 3Advanced c sharp part 3
Advanced c sharp part 3
 
Тема 10. Стандарти ANSI ASC X12, ISO 11179. Підтримка стандарту Дублінського ...
Тема 10. Стандарти ANSI ASC X12, ISO 11179. Підтримка стандарту Дублінського ...Тема 10. Стандарти ANSI ASC X12, ISO 11179. Підтримка стандарту Дублінського ...
Тема 10. Стандарти ANSI ASC X12, ISO 11179. Підтримка стандарту Дублінського ...
 
sql introduction
sql introductionsql introduction
sql introduction
 
лекція 9
лекція 9лекція 9
лекція 9
 
Вдосконалені алгоритми сортування
Вдосконалені алгоритми сортуванняВдосконалені алгоритми сортування
Вдосконалені алгоритми сортування
 
Системний аналіз та імітаційне моделювання.ppt
Системний аналіз та імітаційне моделювання.pptСистемний аналіз та імітаційне моделювання.ppt
Системний аналіз та імітаційне моделювання.ppt
 
БазовI структури алгоритмiв. конструювання алгоритмiв
БазовI структури алгоритмiв. конструювання алгоритмiвБазовI структури алгоритмiв. конструювання алгоритмiв
БазовI структури алгоритмiв. конструювання алгоритмiв
 
L l13
L l13L l13
L l13
 
базовI структури алгоритму урок 4
базовI структури алгоритму урок 4базовI структури алгоритму урок 4
базовI структури алгоритму урок 4
 
01 Вступ
01 Вступ01 Вступ
01 Вступ
 
Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1
 
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)
 

Recently uploaded

Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdf
Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdfЗастосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdf
Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdfssuser15a891
 
Defectolog_presentation_for_website.pptx
Defectolog_presentation_for_website.pptxDefectolog_presentation_for_website.pptx
Defectolog_presentation_for_website.pptxOlgaDidenko6
 
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...JurgenstiX
 
Супрун презентація_presentation_for_website.pptx
Супрун презентація_presentation_for_website.pptxСупрун презентація_presentation_for_website.pptx
Супрун презентація_presentation_for_website.pptxOlgaDidenko6
 
psychologistpresentation-230215175859-50bdd6ed.ppt
psychologistpresentation-230215175859-50bdd6ed.pptpsychologistpresentation-230215175859-50bdd6ed.ppt
psychologistpresentation-230215175859-50bdd6ed.pptOlgaDidenko6
 
Проблеми захисту лісу в Україні та шляхи вирішення
Проблеми захисту лісу в Україні та шляхи вирішенняПроблеми захисту лісу в Україні та шляхи вирішення
Проблеми захисту лісу в Україні та шляхи вирішенняtetiana1958
 
Горбонос 2024_presentation_for_website.pptx
Горбонос 2024_presentation_for_website.pptxГорбонос 2024_presentation_for_website.pptx
Горбонос 2024_presentation_for_website.pptxOlgaDidenko6
 
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»tetiana1958
 
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.ppt
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.pptЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.ppt
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.pptssuser59e649
 
Супрун презентація_presentation_for_website.pptx
Супрун презентація_presentation_for_website.pptxСупрун презентація_presentation_for_website.pptx
Супрун презентація_presentation_for_website.pptxOlgaDidenko6
 
Р.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповіданняР.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповіданняAdriana Himinets
 
Презентациія для сайта Група «Незабудка».pptx
Презентациія для сайта Група «Незабудка».pptxПрезентациія для сайта Група «Незабудка».pptx
Презентациія для сайта Група «Незабудка».pptxOlgaDidenko6
 
Бібліотека – розвиток дитячої творчості та дозвілля для дітейpptx
Бібліотека – розвиток дитячої творчості  та дозвілля для дітейpptxБібліотека – розвиток дитячої творчості  та дозвілля для дітейpptx
Бібліотека – розвиток дитячої творчості та дозвілля для дітейpptxssuserc301ed1
 
Хімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 класХімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 класkrementsova09nadya
 
атестація 2023-2024 Kewmrbq wtynh GNJ.pdf
атестація 2023-2024 Kewmrbq wtynh GNJ.pdfатестація 2023-2024 Kewmrbq wtynh GNJ.pdf
атестація 2023-2024 Kewmrbq wtynh GNJ.pdfhome
 
Бомбочки для ванни своїми руками презентація
Бомбочки для ванни своїми руками презентаціяБомбочки для ванни своїми руками презентація
Бомбочки для ванни своїми руками презентаціяssuser0a4f48
 
Іваніщук Надія Вікторівна атестація .pdf
Іваніщук Надія Вікторівна атестація  .pdfІваніщук Надія Вікторівна атестація  .pdf
Іваніщук Надія Вікторівна атестація .pdfhome
 

Recently uploaded (17)

Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdf
Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdfЗастосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdf
Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdf
 
Defectolog_presentation_for_website.pptx
Defectolog_presentation_for_website.pptxDefectolog_presentation_for_website.pptx
Defectolog_presentation_for_website.pptx
 
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
 
Супрун презентація_presentation_for_website.pptx
Супрун презентація_presentation_for_website.pptxСупрун презентація_presentation_for_website.pptx
Супрун презентація_presentation_for_website.pptx
 
psychologistpresentation-230215175859-50bdd6ed.ppt
psychologistpresentation-230215175859-50bdd6ed.pptpsychologistpresentation-230215175859-50bdd6ed.ppt
psychologistpresentation-230215175859-50bdd6ed.ppt
 
Проблеми захисту лісу в Україні та шляхи вирішення
Проблеми захисту лісу в Україні та шляхи вирішенняПроблеми захисту лісу в Україні та шляхи вирішення
Проблеми захисту лісу в Україні та шляхи вирішення
 
Горбонос 2024_presentation_for_website.pptx
Горбонос 2024_presentation_for_website.pptxГорбонос 2024_presentation_for_website.pptx
Горбонос 2024_presentation_for_website.pptx
 
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
 
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.ppt
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.pptЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.ppt
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.ppt
 
Супрун презентація_presentation_for_website.pptx
Супрун презентація_presentation_for_website.pptxСупрун презентація_presentation_for_website.pptx
Супрун презентація_presentation_for_website.pptx
 
Р.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповіданняР.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповідання
 
Презентациія для сайта Група «Незабудка».pptx
Презентациія для сайта Група «Незабудка».pptxПрезентациія для сайта Група «Незабудка».pptx
Презентациія для сайта Група «Незабудка».pptx
 
Бібліотека – розвиток дитячої творчості та дозвілля для дітейpptx
Бібліотека – розвиток дитячої творчості  та дозвілля для дітейpptxБібліотека – розвиток дитячої творчості  та дозвілля для дітейpptx
Бібліотека – розвиток дитячої творчості та дозвілля для дітейpptx
 
Хімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 класХімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 клас
 
атестація 2023-2024 Kewmrbq wtynh GNJ.pdf
атестація 2023-2024 Kewmrbq wtynh GNJ.pdfатестація 2023-2024 Kewmrbq wtynh GNJ.pdf
атестація 2023-2024 Kewmrbq wtynh GNJ.pdf
 
Бомбочки для ванни своїми руками презентація
Бомбочки для ванни своїми руками презентаціяБомбочки для ванни своїми руками презентація
Бомбочки для ванни своїми руками презентація
 
Іваніщук Надія Вікторівна атестація .pdf
Іваніщук Надія Вікторівна атестація  .pdfІваніщук Надія Вікторівна атестація  .pdf
Іваніщук Надія Вікторівна атестація .pdf
 

l9

  • 2. Іспит: (42 + 42) / 2 + (28 V 28) * kзахист
  • 3. M1:Вступ. Поняття моделі обчислень та алгоритму. • Історія поняття алгоритму. • Хронологія теорії алгоритму. • Визначення алгоритму. • Основні вимоги до алгоритму. • Основні етапи повної побудови алгоритму. • Методи представлення алгоритму. • Методи проектування алгоритму. • Оцінка коректності алгоритму. • Введення в теорію алгоритмів. • Формалізація поняття алгоритму.
  • 4. M1: Частина 1. Тема №1. Методи синтезу та способи відображення алгоритмів. Підходи при синтезі алгоритмів(алгоритмічні стратегії). • Графічне відображення алгоритму. • Відображення алгоритму за допомогою ПГА. • Метод “розділяй і пануй”. • Повний перебір. • Динамічне програмування. • Скупі алгоритми. • Бектрекінг (перебір з поверненням). • Метод гілок і границь. • Ймовірністні алгоритми. • Алгоритми локального пошуку.
  • 5. M1: Частина 1. Тема №2. Основи аналізу алгоритмів. • Оцінка розміру вхідних даних. • Складність по пам’яті. • Складність по часу виконання алгоритму. • Порівняння найкращих, середніх та найгірших оцінок. • Ріст функцій. • О-, о-, W-, ω-, Q- нотації. • Стандартні класи ефективності алгоритмів. • Математичний аналіз нерекурсивних алгоритмів. • Рекурсивні алгоритми. • Математичний аналіз рекурсивних алгоритмів. • Емпиричний аналіз алгоритмів.
  • 6. M1: Частина 1. Тема №3. Базові алгоритми обробки інформації. 3.1. Алгоритми пошуку. • Послідовний пошук • Бінарний пошук. • Пошук в лінійних списках. • Задача вибору. • Дерева бінарного пошуку. • Збалансовані дерева. • Вичерпний пошук. • Хешування. • Розв’язання колізій при хешуванні відкритою адресацією та методом ланцюжків. • Порозрядний пошук. • Зовнішній пошук.
  • 7. M1: Частина 1. Тема №3. Базові алгоритми обробки інформації. 3.2. Алгоритми сортування даних. • Сортування вибором. • Сортування вставками. • Сортування обміном. • Сортування злиттям. • Сортування Шелла. • Швидке сортування. • Пірамідальне сортування. • Порозрядне та бітове сортування. • Методи сортування спеціального призначення. • Мережі сортування. • Зовнішне сортування.
  • 8. M1: Частина 1. Тема №3. Базові алгоритми обробки інформації. 3.3. Алгоритми порівняння зі взірцем. • Алгоритм Рабіна-Карпа. • Пошук підрядків за допомогою скінчених автоматів. • Алгоритм Кнута-Морріса-Пратта. • Алгоритм Бойєра-Мура. • Наближене порівняння рядків.
  • 9. M1: Частина 1. Тема №3. Базові алгоритми обробки інформації. 3.4. Чисельні алгоритми. • Матриці та дії з ними. • Множення матриць по Винограду та по Штрассену. • Робота з довгими числами. • Алгебраїчні системи. • Розв’язок систем лінійних рівнянь. • Розв’язання нелінійних рівнянь. • Многочлени та швидке перетворення Фур’є. • Алгоритми апроксимації і інтерполяція чисельних функцій.
  • 10. M1: Частина 1. Тема №3. Базові алгоритми обробки інформації. 3.5. Графи та мережеві алгоритми. • Пошук у графі. • Породження всіх каркасів графа. • Каркас мінімальної ваги. • Метод Дж. Краскала. • Метод Р. Пріма. • Досяжність. Визначення зв’язності. Двозв’язність. • Ейлерові цикли. • Гамільтонові цикли. • Фундаментальна множина циклів. • Алгоритм Дейкстри • Алгоритм Флойда. • Метод генерації всіх максимальних незалежних множин графа. • Задача про найменше покриття. • Задача про найменше розбиття. • Розфарбування графа. • Пошук мінімального розфарбування вершин графа. • Використання задачі про найменше покриття при розфарбуванні вершин графа. • Потоки в мережах. • Метод побудови максимального потоку в мережі. • Методи наближеного рішення задачі комівояжера(метод локальної оптимізації, алгоритм Эйлера, алгоритм Крістофідеса). • Аналіз алгоритм на графах.
  • 11. M1: Частина 1. Тема №3. Базові алгоритми обробки інформації. 3.6. Паралельні та розподілені алгоритми. • Модель паралельного виконання програми зі спільною пам’яттю і модель передачі повідомлень. • Організація паралельних обчислень відповідно до принципу консенсусу і на основі вибору. • Методи визначення завершення паралельних обчислень. • Паралельний пошук. • Паралельне сортування. • Паралельні чисельні алгоритми. • Паралельні алгоритми на графах.
  • 12. Рівні проектування цифрових систем • SW: Application • SW: C++ Boost • SW: C++ STL • SW: C++11 • SW: C++ • SW: C • SW: Assembler SW ---------------------------------------------------------------------------------------------------- • (TLM)HW: SystemC/SystemVerilog (Architecture, CE) HW • (RTL)HW: VHDL/Verilog (Logic Circuit, CE)(1) • HW: VHDL/Verilog (Logic Circuit, CE)(2) • HW: SPICE/Verilog (Logic Circuit, EE)(1) • HW: SPICE (Logic Circuit, EE)(2) • HW: SPICE/GDSII (Logic Circuit, EE-PD) --------------------------------------------------------------- • (DFM)HW: GDSII (Logic Circuit, EE-PD) A || || || || || || || || || || || || || || || || ||
  • 13.
  • 16. Під впливом STL виникли: Альтернативні підходи:
  • 18. БібліотекаБібліотека STLSTL • Бібліотека стандартних шаблонів (БСШ- STL- standart template library) не входила у вихідну специфікацію С++, а була добавлена розробниками пізніше. • БСШ забезпечує загальноцільові, стандартні класи і функції, реалізовує найбільш важливі алгоритми і структури даних. Оскільки вона будується на основі класів-шаблонів, алгоритми, які в неї входять, можуть бути застосовані практично до будь-яких типів даних, які допускаються в С++. • Використання засобів БСШ дозволяє суттєво підвищити надійність програм, їх універсальність, а також суттєво зменшити терміни розробки програм. • Ядро БСШ складають три основні елементи: 1. контейнери, 2. aлгоритми, 3. ітератори. • Ці елементи взаємно функціонують, забезпечуючи при цьому вирішення поставлених задач.
  • 19. ДДодатковіодаткові методиметоди • Додатково до контейнерів, алгоритмів та ітераторів у STL підтримується ще декілька стандартних компонентів. Головними серед них є розподільники пам’яті (allocators), предикати (predicates) та функції порівняння (comparison functions). • У кожного контейнера є визначений для нього розподільник пам’яті або алокатор. Алокатори керують процесом розподілу пам’яті. По замовчуванню розподільником пам’яті є об’єкт класу allocator, який оголошений у ФЗ <memory.h>. Конструктор цього класу генерує виклик функції побудованої на основі шаблону allocate з цього ж ФЗ. Наведемо прототип цієї функції-шаблону  template <class T> inline T* allocate (int size, T*); • Тут T - тип одного елемента-блока; size - кількість блоків. Повертає шаблон адресу виділеної через оператор new пам’яті. • У більшості випадків достатньо розподільника, який задається по замовчуванні,але можна визначити і власний розподільник пам’яті. • В деяких алгоритмах і контейнерах використовуються функції особливого типу, які називаються предикатами. Предикат може бути бінарним або унарним. Унарний предикат має один аргумент, бінарний- два. Аргументи бінарного предикату завжди розташовані по-порядку. Тип аргументів предикатів відповідає типу об’єктів, які зберігаються в контейнері. • Повертають предикати булівське значення. Проте точні умови повернення значення предикатом повинні визначатись розробником. Як правило, існує два типи для оголошення предикатів: UnPred - для унарного і BinPred- для бінарного. • В деяких алгоритмах і класах використовується спеціальний тип бінарного предиката, який призначений для порівняння двох елементів контейнера. Такий предикат називається функцією порівняння. Функція порівняння повертає істину, якщо її перший аргумент менший за другий. • Найбільш поширеним предикатом є функція порівняння двох елементів Comp, яка повертає true при умові, що перший елемент менший за другий.
  • 20. ККooнтейнеринтейнери • Контейнери (containers) - це об’єкти, які призначені для зберігання інших об’єктів. Контейнери бувають різних видів. Так у класі-шаблоні vector визначається динамічний масив, а в класі list - лінійний список. Загалом БСШ містить контейнери, які реалізовують основні структури даних, які використовуються при написанні програм - вектори, двонаправлені черги, списки і ії різновиди, словники (пари) і множини. • Умовно контейнери можна розбити на два типи: послідовні і асоціативні. • Послідовні контейнери (serial containers) забезпечують зберігання скінченного числа однотипних елементів у вигляді неперервної послідовності. До таких контейнерів відносять вектори, двонаправлені черги і списки, а також так звані адаптери, тобто контейнери, які реалізовують стеки, черги і черги з пріоритетами. • Асоціативні контейнери (associative containers) дозволяють за допомогою ключів (keys) отримати швидкий доступ до значень, які зберігаються у контейнері. Наприклад, у класі map визначається асоціативний список, який забезпечує доступ до значень за допомогою унікальних ключів. Тобто в асоціативних списках зберігаються пари ключ/значення, що дозволяє при наявності ключа отримати відповідне значення. • Існує п’ять типів асоціативних контейнерів: словники (набори пар), словники з дублюванням або пари з не унікальними ключами, множини, не унікальні множини і бітові множини (масиви, набори). • Синтаксично контейнер є класом-шаблоном. Ці шаблони забезпечують стандартизований інтерфейс для різних контейнерів. • Оскільки імена типів елементів, які входять в оголошення класу-шаблону можуть бути найрізноманітнішими, то у контейнерах за допомогою зарезервованого слова typedef оголошуються деякі узгоджені версії цих типів. Це дозволяє конкретизувати імена типів. • У кожному контейнері визначений набір функцій для роботи з цим контейнером. Так, наприклад, список містить функції для вставлення, знищення і об’єднання елементів. В контейнері стек є функції для розміщення елемента і виштовхування його з контейнера. #include <iostream> #include <vector> using namespace std; vector<int> mas; main(){ cout<<"Введіть розмір масиву "; int sz; cin>>sz; int val; for(int i=0;i<sz;i++) { cout<<"Введіть "<<i<<" елемент"; cin>>val; // додавання елементів в масив mas.push_back(val); } cout<<"Перший елемент: "<<mas[0]; }
  • 21. НабірНабір контейнерівконтейнерів STLSTL <vector>векторvector <stack>стекstack <set>множина унікальних елементівset <queue>чергаqueue <queue>черга з пріорітетомpriority_queue <set>множина елементівmultiset <map>асоціативний список для зберігання пар ключ/значення. З одним ключем може бути зв'язано декілька значень multimap <map>асоціативний список для зберігання пар ключ/значення. З одним ключем зв'язано лише одне значення map <list>лінійний списокlist <deque>двостороння чергаdeque <bitset>набір бітівbitset ФЗОписКонтейнер
  • 22. СписокСписок типівтипів STLSTL Узгоджене ім'я типу Опис size_type Інтегральний тип, еквівалентний типу size_t reference Посилання на елемент const_reference Постійне посилання iterator Ітератор const_iterator Постійний ітератор reverse_iterator Зворотній ітератор const_reverse_iterator Постійний зворотній ітератор value_type Тип значення в контейнері allocator_type Тип розподільника пам’яті (алокатора) key_type Тип ключа key_compare Тип порівняння двох ключів value_compare Тип порівняння двох значень
  • 23. ПослідовніПослідовні контейнериконтейнери • Вектор (vector), черги, двонаправлена чергa (deque), стек (stack) і список (list) складають набір послідовних контейнерів STL. • Вони підтримують різні набори операцій (методів), серед яких є такі що збігаються. Операція Метод vector deque list Вставка напочаток push_front() - + + Видалення з початку pop_front() - + + Вставка в кінець push_back() + + + Видалення з кінця push_front() + + + Вставка в довільному місці insert() + + + Видалення з довільного місця erase() + + + Довільний доступ до елемента [] . At + + - Кількість елементів size() + + + Максимальний розмір контейнера max_size() + + + Булівська функція, яка визначає чи контейнер є порожнім empty() + + +
  • 24. КонтейнерКонтейнер векторвектор ((vectorvector)) • Контейнер веrтор (vector) - це структура, яка ефективно реалізовує прямий доступ до елементів, додавання і знищення з кінця. В контейнері vector підтримуються динамічні масиви, тобто масиви, розміри яких можуть збільшуватись за потребою. • Виділення фіксованого розміру пам’яті для масиву є більш ефективним. Водночас, воно є і найбільшим обмеженням, оскільки не дозволяє адаптувати масив до змін, які виникають під час виконання програми. Вирішенням цієї проблеми є використання контейнера вектор, який виділяє пам’ять під масив по мірі потреби. Незважаючи на те, що вектор за своєю природою є динамічним масивом, для доступу до його елементів можна використовувати звичайну операцію індексації. • Для будь-якого об’єкта, який зберігається у векторі повинен бути визначений конструктор по замовчуванню. Окрім цього, повинні бути визначені також оператори порівняння < і == (для вбудованих типів усі вказані вимоги задовільняються автоматично). • Специфікація шаблону-класу vector має вид: • template<class T, class Allocator = allocator<T>>class vector; Тут T - тип значень (шаблонний тип), які будуть зберігатись у контейнері vector. Зарезервоване слово Allocator визначає розподільник пам’яті, який по замовчуванню є стандартним. • В класі vector є такі конструктори: 1. explicit* vector (const Allocator& a = Allocator()); 2. explicit vector (size_type n, const T& значення = T(), const Allocator &a = Allocator()); 3. vector (const vector<T, Allocator>& об’єкт); 4. template<class InIter>vector (InIter початок, InIter кінець, const Allocator &a=Allocator()) • Перша форма є конструктором порожнього вектора. • Друга форма створює вектор довжиною n елементів, кожен з яких елемент рівний значенню. Параметр значення приймає аргумент по замовчуванні, який для вбудованих типів є нульовим значенням. Для користувацьких типів значення аргумента по замовчуванні визначається конструктором без параметрів для даного типу. • Третя форма є конструктором копіювання. • Четверта форма - це конструктор вектора, який створює вектор шляхом копіювання вказаного за допомогою ітераторів діапазону значень. #include <vector> using namespace std; class A { public: int i; A(){i=0;} A(int i){A::i=i;} }; vector<int> v1; //1-форма vector<int> v2(5); //2-форма vector<int> v3(5,4); //2-форма vector<int> v4=v3; //3-форма vector<int> v5(v3); //3-форма vector<int> v6(v2.begin(),v2.begin()+2);//4-форма vector<A> v7(3); //2-форма vector<A> v8(3, A(4)); //2-форма
  • 25. ОператориОператори контейнераконтейнера vectorvector • Для класу vector визначені оператори:  оператор присвоєння = :  vector<T>& operator= (const vector<T>&);  оператор (функція-шаблон) порівняння на рівність == (рівність забезпечується рівністю усіх відповідних пар елементів):  template <class T> bool operator== (const vector<T>&, const vector <T>&);  оператор (функція-шаблон) порівняння на меньше < (один вектор вважається меншим від іншого, якщо перший з елементів одного вектора є меншим від відповідного елемента другого):  template <class T> bool operator< (const vector<T>&, const vector <T>&);  оператор індексації [] :  reference operator[] (size_type);  const_reference operator[] (size_type) const; • Окрім наведених визначено також операції !=, <=.
  • 26. МетодиМетоди доступудоступу додо елементівелементів контейнераконтейнера векторавектора • Методи доступу до елементів вектора (окрім оператора []) :  доступ до елементів вектора з перевіркою виходу за границю вектора (оператор індексації такої перевірки не здійснює). У випадку виходу за границю контейнера генерується КС out_range  reference at(size_type n);  const_reference at(size_type n) const;  вибірка першого елемента (посилання на елемент) контейнера  reference front();  const_reference front() const;  вибірка останнього елемента контейнера  reference back();  const_reference back() const;
  • 27. МетодиМетоди управлінняуправління обсягомобсягом контейнераконтейнера vectorvector • визначення розміру контейнеру  size_type size() const; • визначення максимально допустимого розміру контейнеру  size_type max_size() const; • зміна розміру контейнеру. Перший параметр задає новий розмір, другий параметр - значення, які, у випадку збільшення розміру, будуть присвоюватись новим елементам контейнера. Нові елементи будуть додаватись в кінець • void resize (size_type,T c = T()); • визначення розміру пам’яті, яку займає контейнер  size_type capacity() const; • перевірка чи контейнер порожній  bool empty() const; • задання розміру пам’яті для контейнера  void reserve(size_type);
  • 28. МетодиМетоди змінизміни обоб’’єктівєктів контейнераконтейнера vectorvector • додавання нового елемента в контейнер (в кінець)  void push_back(const T&); • знищення останнього елемента в контейнері  void pop_back(); • додавання елемента, який задається другим параметром в контейнер в позицію, яка вказана першим параметром  iterator insert (iterator, const T& = T());  додавання n однакових елементів в позицію, яка вказана першим параметром  void insert(iterator, size_type n, const T& = T());  додавання елементів з діапазону, який задається другим та третім параметрами, в позицію, яка вказана першим параметром  template <class InputIterator> void insert(iterator, InputIterator, InputIterator); • знищення елемента, який адресується параметром  void erase(iterator); • знищення елементів з діапазону, який задаєтьяс параметрами  void erase(iterator, iterator); • обмін елементами двома контейнерами  void swap(vector<T>&); • копіювання елементів, яке є аналогічне діє конструкторів другої та третьої форми  template <class InputIterator> void assign(InputIterator first, InputIterator last);  template <class Size, class T> void assign(Size n, const T& t = T());
  • 29. ПрикладПриклад контейнераконтейнера vectorvector #include <vector> #include <iostream> using namespace std; // створити вектор нульової довжини vector<int> v; int main() { int i; for(i=0; i<10; i++) // додати елементи у вектор v.push_back(i); cout<<"Розмір: "<<v. size() <<endl; for(i=0; i<v.size(); i++) // вивід елементів вектора cout<<i<<"-ий елемент"<<v[i]<<endl; //ітератор на початок vector<int>::iterator p=v.begin(); // ітератор на третій елемент p+=2; // вставити 10 елементів рівних 0 v.insert(p, 10, 0); p=v.begin(); p+=4; // знищити починаючи з 5-го 2 елемента v.erase(p, p+2); v.begin(); while(p!=v.end()) { // вивід вмісту вектора через ітератор cout<<*p<<" "; p++; }; return 0;
  • 30. АсоціативніАсоціативні контейнериконтейнери • Як вже відзначалось, асоціативні контейнери забезпечують швидкий доступ до даних за рахунок того, що вони побудовані на основі збалансованих дерев пошуку (стандартом регламентується тільки інтерфейс контейнера, а не їх реалізація). • Асоціативні контейнери залежать від двох параметрів - Key (ключ) і Compare (відношення повного впорядкування за ключем Key) . Контейнери set і multiset є “виродженими” асоціативними контейнерами, у яких значення не є особливо важливими - усі операції здійснюються за допомогою ключів. Контейнер шаблону set повинен складатись із унікальних ключів, а multiset - допускає дублювання ключів. • Контейнери типу map і multimap елементами є пари значень, які складаються з об’єктів шаблонного типу T, які, у свою чергу, зв’язані з об’єктами типу Key. • Для зберігання пари “ключ-елемент” використовується шаблон pair, який описаний у ФЗ <utility>. template <class T1, class T2> struct pair { typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; pair (const T1& x, const T2& y); template <class U, class V> pair(const pair<U,V>& p); }; • Ітератори асоціативних контейнерів є двонапавленими. Оператори вставляння не впливають на коректність ітераторів і посилання на елементи контейнера, а операція видалення анулює лише ітератори та посилання на видалені елементи Окрім того, ітератори асоціативних контейнерів пересуваються по елементах контейнера лише в порядку зростання ключів. • Існуть такі асоціативні контейнери:  унікальні словники (map),  словники (multimap),  унікальні множини (set),  множини (multiset),  бітові множини (bitset).
  • 31. Операції, які є спільними для усіх асоціативних контейнерів Конструктори AssociativeContainer () Створює порожній контейнер AssociativeContainer (const Comparison& с) Створює порожній контейнер із заданим відношенням порівняння AssociativeContainer (i, j) Створює контейнер ініціалізований діапазоном [i,j] AssociativeContainer (i, j, с) Створює контейнер ініціалізований діапазоном [i,j] із заданим відношенням порівняння Доступ до елементів контейнера iterator find(key) Здійснює пошук елемента за задним ключем, повертає ітератор на шуканий елемент const-iterator find(key) iterator lower_bound(key) Повертає ітератор на перший знайдений за заданим ключем елемент const iterator lower_bound(key) iterator upper_bound(key) Повертає ітератор на наступний від знайденого за заданим ключем елемент, ключ якого є більшим від ключа знайденого елемента const iterator upper_bound(key) pair<iterator, iterator> equal_range(key) Повертає пару ітераторів на перший та останній елементи, ключі яких рівні заданому size_t count(key) Повертає кількість елементів, які мають заданий ключ Вставляння і видалення pair<iterator,bool> insert(t) Вставляє елемент t. Повертає пару, яка складється з ітератора, який посилається на елемент, що вставлявся, та логічне значення (true — вставляння виконане, false — вставляння не виконане) void insert(i,j) Вставляє в контейнер діапазон [i,j] void erase(pos) Видаляє елемент, на який посилається ітератор pos size_t erase(key) Видаляє елемент, який має ключ key void erase(i,j) Видаляє діапазон [i,j]
  • 32. Контейнер map • Контейнер map - унікальний словник, або набір унікальних пар або асоціативний список. • Словник будується на основі пар значень. Перше значення є ключем для індентифікації пари, а друге - саме значенням. • Ключем може бути значення будь-якого типу. Але в контейнері map він є унікальним. • Типовий заголовок шаблону map може бути таким  template <class Key, class T, class Compare = less<Key> class Allocator = allocator<pair<const Key, T>> > class map; • Конструктори деструктор : 1. explicit map(const Compares comp = Compare(), const Allocator&= Allocator()); 2. template <class Inputlterator> map(Inputlterator first, Inputlterator last, const Compares: comp = Compared, const Allocators = Allocator()); 3. map (const map<Key, T, Compare, Allocator>&); 4. ~map(); • Перша форма конструктора створює порожній словник. • Друга форма створює асоціативний список через задавання початку і кінця діапазона, а також функцію присвоєння  map<Key,T,Compare,Allocator>& operator=(const map<Key,Т,Compare,Allocator>& x); • Цей конструктор створює асоціативний список та ініціалізує його елементами x. • Третя форма є конструктором копії. • І, нарешті, шаблон map має деструктор, який знищує словник у пам’яті.
  • 33. Операції над контейнером map • зміна і визначення розміру об’єкта:  визначення кількості елементів у словнику – size_type size() const;  визначення максимально кількості елементів у словнику – size_type max_size() const;  перевірка чи масив є порожнім. Якщо так, то повертається true. В противному випадку - false. – bool empty() const; • оператор доступу:  доступ до елементів асоціативного списку забезпечується операторм індексації – operator[](const key_type& x); • операції вставляння: • Вставляння елементів у словник здійснюється такими методами:  вставляння елементу у контейнер і повернення пари, яка складається з ітератора і булівського значення. Оскільки об’єкт шаблону map не допускає дублювання, то пара, яка повертається дозволяє визначити успішність виконання операції, яка здійснюється. Якщо у словнику не існувало елемента із заданим ключем, то булівська змінна (у парі, яка повертається) буде містити значення true, а ітератор буде посилатись на вставлений елемент. Решту варіантів функції insert() не дозволяють з’ясувати чи виконане вставляння – pair<iterator, bool> insert(const value_type& x) ;  вставляння елемента перед елементом, на який посилається ітератор position – iterator insert(iterator position, const value_type& x);  вставляння діапазона елементів, який визначається ітераторами first та last – template <class Inputlterator> void insert(InputIterator first, Inputlterator last); • операції знищення:  знищення елемента, на який посилається ітератор position – void erase(iterator position);  знищення елемента по заданому ключу – size_type erase (const key_type& x) ;  заміна місцями елементів словника, який викликає метод, і аргумента – void swap(map<Key, Т, Compare, Allocators);  очищення словника (видалення усіх елементів) – void clear();
  • 34. Операції над контейнером map • функтори порівняння:  повертання функтора, який порівнює ключі – key_compare key_comp() const;  повертання функтора, який порівнює значення – value_compare value_comp()const; • операції пошуку:  метод find()повретає ітератор, який встановлений на шукане значення. Якщо шуканого значення не знайдено, то повертатиметься ітератор, який встановлений на значення поза межами контейнера. Пошук здійснюється за ключем – iterator find(const key_type& x); – const_iterator find(const key_type& x) const;  повертання кількості елементів, які мають заданий ключ – size_type count(const key_type& x) const;  повертання ітератора, який посилається на початок послідовності елементів, що мають заданий ключ – iterator lower_bound(const key_type& x); – iterator lower_bound(const key_type& x) const;  повертання ітератора, який посилається на кінець послідовності елементів, що мають заданий ключ – iterator upper_bound(const key_type& x); – iterator upper_bound(const key_type& x) const;  повертання пари, яка складається із ітераторів, які посилається на початок та кінець послідовності елементів, що мають заданий ключ – pair<iterator,iterator> equal_range(const key_type& x); – pair<iterator,iterator> equal_range(const key_type& x) const;
  • 35. Операції порівняння контейнера map • оператор перевірки рівності двох словників. У випадку, якщо словники x і y складаються з однакових елементів, то повертає значення true. Операція порівняння задається функтором Compare – template <class Key, class T, class Compare, class Allocator> bool operator< (const map<Key,T, Compare, Allocators x, const map<Key,T, Compare, Allocators y); • оператор перевірки нерівності “менше” двох словників. У випадку, якщо словник x є меншим від словника y , то повертає значення true. Операція порівняння задається функтором Compare – template <class Key, class Т, class Compare, class Allocator> bool operator!= (const map<Key, T, Compare, Allocators x, const map<Key,T, Compare, Allocators y) ; • оператор перевірки рівності двох словників. У випадку, якщо словники x і y складаються з неоднакових елементів, то повертає значення true. Операція порівняння задається функтором Compare – template <class Key, class T, class Compare, class Allocator> bool operator ! = (const map<Key,T, Compare, Allocators x, const map<Key,T, Compare, Allocators y) ; • оператор перевірки нерівності “більше” двох словників. У випадку, якщо словник x є більшим від словника y , то повертає значення true. Операція порівняння задається функтором Compare – template <class Key, class Т, class Compare, class Allocator> bool operator> (const map<Key,T,Compare, Allocators x, const map<Key,T,Compare, Allocators y); • оператор перевірки нерівності “більше рівне” двох словників. У випадку, якщо словник x є більшим або рівним словнику y , то повертає значення true. Операція порівняння задається функтором Compare – template <class Key, class T, class Compare, class Allocator> bool operator>=(const map<Key,T,Compare, Allocators x, const map<Key, T, Compare, Allocators y); • оператор перевірки нерівності “менше рівне” двох словників. У випадку, якщо словник x є меншим або рівним словнику y , то повертає значення true. Операція порівняння задається функтором Compare – template <class Key, class T, class Compare, class Allocator> bool operator<=(const map<Key,T,Compare, Allocators x, const map<Key,T,Compare, Allocators y); • зміна місцями елементів словників x та y. – template <class Key, class T, class Compare, class Allocator> void swap (map<Key, T, Compare, Allocators x, map<Key, T, Compare, Allocators y);
  • 36. Приклад контейнера map #include <iostream> #include <map> #include <string> using namespace std; typedef map<int, char*, less<int> > MAP; void print(MAP &Map); void reverse_print(MAP &Map); int main() { const int SIZE = 5; char* NUMBERS[]={"One", "Two", "Three", "Four", "Five"}; int i; MAP::iterator where, newWhere; // Порожні словники MAP Map, newMap; // Заповнення словника через функцію insert() for (i = 0; i < SIZE; i++) { Map.insert(MAP::value_type(i,NUMBERS[i])); newMap.insert(MAP::value_type(i,NUMBERS[i])); } printf("Словник Mapn"); print(Map); printf("Словник newMapn"); print(newMap); // Вивід вмісту словника у зворотньому порядку printf("Словник Map у зворотньому порядкуn"); reverse_print(Map); printf("Словник newMap у зворотньому порядкуn"); reverse_print(newMap); // Вивід на екран розмірів словників int MapSize = Map.size(); printf("Розмір словника Map = %dn", MapSize); MapSize = newMap.size(); printf("Розмір словника newMap = %dn", MapSize); // Вивід на екран максимальних розмірів словників MapSize = Map.max_size(); printf("Максимальний розмір масиву Map = %dn", MapSize); MapSize = newMap.max_size(); printf("Макс. розмір масиву newMap = %dn", MapSize); // Вивід на екрант кількості п'ятірок MapSize = Map.count(5); printf("Кількість п'ятірок у наборі Map = %dn", MapSize); MapSize = newMap.count(4); printf("Кількість 5 у наборі newMap = %dn", MapSize); // Шукаємо і видаляємо трійку в Map where = Map.find(3); Map.erase(where) ; printf("Словник Map після видалення трійкиn"); print(Map); // Видалення двох останніх елементів Map where = Map.find(2); Map.erase (where, Map.end() ); printf("Словник Map після видалення двох останніх елементівn"); print(Map); // Очищаємо Map за допомого функції clear() Map.clear(); printf("Спроба вивести порожній словник n"); print(Map); // Заповнюємо Map за допомогою методу insert // Дублювання не допускається for (i =0; i < 10; i++) { if(i<2) Map.insert(MAP::value_type(2,"Two")); if(i<2 && i< 5) Map.insert(MAP::value_type(7,"Seven")); if(i>5) Map.insert(MAP::value_type(10,"Ten")); } printf("Новий словник Марn"); print(Map); // Перестановка словників swap(Map, newMap); printf("Словник Map після обмінуn"); print(Map); printf ("Словник newMap після обмінуn"); print(newMap); // Діапазон, який складається з десяток printf("Діапазон, який складається з десятокn"); for (where=newMap.lower_bound(10) ; where != newMap.end(); where++) printf("(%d, %s) ", (*where).first, (*where).second); printf("n"); // Діапазон, який складається з двійок printf("Діапазон, який складається з двійокn"); for (where=newMap.begin(); where!= newMap.upper_bound(2); where++) printf("(%d, %s) ",(*where).first,(*where).second); printf("n"); // Діапазон, який складається з cемірок printf("Діапазон, який складається з cемірокn"); for (where=newMap.equal_range(7).first; where!= newMap.equal_range(7).second; where++) printf("(%d, %s) ",(*where).first,(*where).second); printf("n"); // Звертання до елементів словника // через метод operator[] () printf ("operator [ ] n"); for(where=newMap.begin(); where!=newMap.end(); where++) printf("(%d, %s) ",*where, newMap[(*where).first]); printf ("n"); // Порівняння словників if (Map == newMap) printf("Map == newMapn"); if(Map > newMap) printf("Map > newMapn"); if(Map >= newMap) printf("Map >= newMapn"); if(Map < newMap) printf("Map < newMapn"); if(Map <= newMap) printf("Map <= newMapn"); return 0; } void print(MAP &Map) { if (Map.empty()) { printf("%s n","Словник є порожнім"); return; } MAP::iterator i; for(i = Map.begin(); i != Map.end(); i++) printf("(%d, %s) ",(*i).first,(*i).second); printf ("n"); } void reverse_print(MAP &Map) { if (Map.empty()) { printf ("%s n", "Словник є порожнім"); return; } MAP::reverse_iterator i; for(i = Map.rbegin(); i!=Map.rend(); i++) printf ("(%d, %s) ", (*i) .first, (*i) .second) ; printf("n") ; }
  • 37. Алгоритми• Алгоритми (algorithms) виконують операції над вмістом контейнера (тобто над об’єктами контейнера). • Існують найрізноманітніші алгоритми - від ініціалізації до заміни вмісту контейнера. Окрім цього, вони дозволяють одночасно працювати з двома контенерами різних типів. Багато алгоритмів призначені для роботи з послідовністю, яка є лінійним списком елементів всередині контейнера. • Хоча кожен контейнер і підтримує власний набір операцій, проте існує набір стандартних алгоритмів, які забезпечують більш широкі і комплексні дії. Використання стандартних алгоритмів пов’язане з необхідністю підикання ФЗ <algorithm.h>. • Усі алгоритми з <algorithm. h> є функціями-шаблонами. Це дає можливість використовувати їх з контейнерами будь-яких типів. Наведемо приклад використання алгоритму, наприклад count. Його реалізація в середовищі Borland C++ відрізняєтьтся від реалізації у специфікації Standart C++. А тому приведемо прклади для обох версій мови. • Прототип алгоритму count у версії Standart C++ має вигляд  template <class InIter, class T> size_t count(InIter початок, InIter кінець, const T& значення); • Третій параметер значення є параметром на рівність якому порівнються усі елементи контейнера, а їх кількість повертається алгоритмом. #include <iostream> #include <vector> using namespace std; vector<int> mas; main(){ cout<<"Введіть розмір масиву "; int sz; cin>>sz; int val; for(int i=0;i<sz;i++){ cout<<"Введіть "<<i<<" елемент"; cin>>val; mas.push_back(val); // додавання елементів в масив } int n = count(mas.begin(),mas.end(),1); cout<<"Кількість елементів рівних 1 є "<<n; }
  • 38. КатегоріїКатегорії алгоритмівалгоритмів for_each sort сору find stable_sort copy_backward find_end partial_sort swap_ranges find_if partial_sort_copy swap find_first_of nth_element iter_swap adjacent_find lower_bound transform count upper_bound replace count_if equal_range replace_if mismatch binary_search replace_copy equal merge replace_copy_if search inplace_merge fill search_n includes fill_n set_union generate set_intersection generate_n accumulate set_difference remove inner_product set_symmetric_difference remove_if partial_sum make_heap remove_copy adjacent_difference push_heap remove_copy_if pop_heap unique sort_heap unique_copy min reverse max reverse_copy min_element rotate max_element rotate_copy lexicographical_compare random_shuffle next_permutation partition prev_permutation Алгоритми сортування та пошуку Алгоритми, які не змінюють вміст контейнерів Модифікуючі алгоритми Чисельні алгоритми
  • 39. ІтераториІтератори• Ітератори (iterators) - об’єкти, які по відношенню до контейнерів відіграють роль вказівників. Вони дозволяють отримати доступ до елементів контейнерів, аналогічно як вказівники використовуються для доступу до елементів масиву. • Доступ до поточного елемента контейнера, подібно до вказівників, здійснюється за операцій * і ->. Перехід до наступного елемента - за допомогою операції інкремента. Для усіх ітераторів визначені також операції присвоєння, перевірка на рівність і нерівність. • Типом ітераторів оголошується тип iterator, який є визначеним у ФЗ <iterator>. Окрім цього типу у ФЗ <iterator> описуються також ітераторні класи і функції. При використанні стандартних контейнерів цей ФЗ підмикається автоматично. • Існує п’ять основних типів ітераторів (їх список наведений в таблиці). Ітератор RandIter не підтримується контейнером list. Решта контейнерів підтримують ітератори усіх типів. • Бібліотека STL підтримує також так звані зворотні ітератори (reverse iterators). Цими ітераторами можуть бути або bidirectional або random access ітератори, які проходить послідовність елементів як у прямому так і у зворотньому напрямках. Якщо зворотній ітератор вказує на останній елемент послідовності, то його інкремент (++) приведе до вказування на передостанній. #include <iostream> #include <vector> using namespace std; vector<int> mas; main(){ cout<<"Введіть розмір масиву "; int sz; cin>>sz; int val; for(int i=0;i<sz;i++){ cout<<"Введіть "<<i<<" елемент"; cin>>val; mas.push_back(val); // додавання елементів в масив } vector<int>::iterator p=mas.begin(); for(;p<mas.end();p++) cout<<" Елемент="<<*p; } Ітератор Опис Термін Довільного доступу (random access) Використовується для зчитування та запису значень. Доступ до елементів довільний. RandIter Двонаправлений (bidirectional) Використовується для зчитування та запису значень. Може проходити контейнер в обох напрямках. BiIter Однонаправлений (forward) Використовується аналогічно. Може проходити контейнер лише в одному напрямку. ForIter Вводу (input) Використовується для зчитування значень. Може проходити контейнер лише в одному напрямку. InIter Виводу (output) Використовується для запису значень. Може проходити контейнер лише в одному напрямку. OutIter  Ітератори можуть бути постійними. Такі ітератори використовуються тоді, коли треба заборонити зміну елемнтів в контейнері.  Якщо ітератор вказує на конкретний елемент контейнера, то він вважається дійсним (ініціалізованим). В противному випадку - недійсним (неініціалізованим). Ітератор може бути недійсним в таких випадках:  ітератор не був ініціалізований;  контейнер, з яким був зв’язаний ітератор, змінив розміри, або був знищений;  ітератор вказує на кінець послідовності. Кінець послідовності елементів контейнера є вказівником на елемент, який слідує за останнім елементом послідовності. Цей вказівник існує завжди. Такий підхід дозволяє не розглядати порожню послідовність елементів як особливий випадок. Поняття “нульовий” ітератор не існує. Ітератори утворють певну ієрархію в порядку їх оголошення в таблиці. Очевидно, що ітератор з більшими можливостями (який стоїть вище в ієрархії) може використовуватись замість ітератора з меншими. Наприклад однонаправлений ітератор може замінити ітератор вводу (тут мається на увазі ввід/вивід значень у контейнери).
  • 41. Boost • Boost — набір бібліотек, які розширюють функціональність C++. • Вільно поширюються за ліцензією Boost Software License разом з сирцевим кодом. • Бібліотеки boost є кандидатами на включення в наступний стандарт C++. • Деякі бібліотеки boost були включені стандарт C++ ще в 2011 році. • При включенні бібліотеки в boost вона проходить кілька етапів рецензування. • Має власну систему “збирання” (Boost Build). • У сучасній версії (1.66) в boost більше сотні бібліотек. • Сирцевий код і документація доступні на https://www.boost.org .
  • 42. Категорії бібліотеки Boost • String and text processing • Containers • Iterators • Algorithms • Function objects and higher-order programming • Generic Programming • Template Metaprogramming • Concurrent Programming • Math and numerics • Correctness and testing • Data structures • Domain Specific • System • Input/Output • Memory • Image processing • Inter-language support • Language Features Emulation • Parsing • Patterns and Idioms • Programming Interfaces • State Machines • Broken compiler workarounds • Preprocessor Metaprogramming
  • 43. any
  • 46. bind
  • 54. ASIO
  • 55. ASIO