Алгоритми STL Концепція ітераторів Концепцію типу ітератора формують
7692-stl_algorithms_657.ppt
- Количество слайдов: 19
Алгоритми STL
Концепція ітераторів Концепцію типу ітератора формують три ключові положення: абстакція високого рівня щодо роботи з набором даних після інкременту вказує на наступний елемент послідовності; забезпечує перевірку на співпадіння (рівність) з іншим ітератором.
Категорії алгоритмів Алгоритми, які не змінюють послідовність Алгоритми, які змінюють послідовність Алгоритми сортування Алгоритми двійкового пошуку для впорядкованих послідовностей Алгоритми злиття контейнерів Алгоритми для роботи з множинами Алгоритми для роботи з купою Алгоритми перестановки
K6. Алгоритми для роботи з множинами Узагальнене трактування множини: впорядкована послідовність (для швидкодії) допустимі еквівалентні елементи (повторюваність) Для теоретико-множинного використання з послідовностями: впорядкованість елементи без повторення
K6. includes Перевіряє, чи кожен член послідовності [first2, last2) є також членом послідовності [first1, last1). Попередньо обидві послідовності мають бути впорядкованими одним і тим же способом, використовуючи 1) operator<(); 2) бінарний предикат ( глобальну функцію чи operator()() об’єкта-функції компаратора), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Якщо друга послідовність містять еквівалентні елементи, то результатом буде true лише при наявності в першій послідовності не меншого числа таких елементів. STL_algorithmsSet / includes template
K6. set_union Об’єднує дві послідовності в одну, на основі: 1) operator<(); 2) бінарного предикату ( глобальної функції чи operator()() об’єкта-функції компаратора), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Попередньо задані послідовності мають бути впорядковані. Якщо вони містять еквівалентні елементи, то в результуючій послідовності кількість таких елементів співпадає з максимальним числом з кількості входжень у задані послідовності. STL_algorithmsSet / set_union template
K6. set_intersection Записує у вихідну послідовність dest результат множинного перетину двох послідовностей. Повертає end-ітератор отриманої послідовності. Попередньо обидві послідовності мають бути впорядкованими одним і тим же способом, використовуючи 1) operator<(); 2) бінарний предикат ( глобальну функцію чи operator()() об’єкта-функції компаратора), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Результат буде впорядкований, як і у вхідних послідовностях. Якщо задані послідовності містять еквівалентні елементи, то в результуючій послідовності кількість таких елементів співпадає з мінімальним числом з кількості входжень у задані послідовності. STL_algorithmsSet / set_intersection template
K6. set_difference Записує у вихідну послідовність dest ті елементи, які входять у першу і не входять у другу послідовність. Повертає end-ітератор отриманої послідовності. STL_algorithmsSet / set_difference template
K6.set_symmetric_difference Записує у вихідну послідовність dest ті елементів, які входять в одну і тільки в одну із заданих послідовностей. Повертає end-ітератор отриманої послідовності. Результат буде впорядкований, як і у вхідних послідовностях. Якщо задані послідовності містять еквівалентні елементи, то в результуючій послідовності кількість таких елементів співпадає з модулем різниці чисел входжень у задані послідовності. STL_algorithmsSet / set_symmetric_difference template
K5. Алгоритми злиття контейнерів
K5.merge Утворює нову відсортовану послідовність dest злиттям двох заданих. Повертає end-ітератор отриманої послідовності. Попередньо обидві послідовності мають бути впорядкованими одним і тим же способом, використовуючи 1) operator<(); 2) бінарний предикат ( глобальну функцію чи operator()() об’єкта-функції), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Результат буде впорядкований, як і у вхідних послідовностях. Якщо задані послідовності містять еквівалентні елементи, то в результуючій послідовності першими йтимуть елементи першої заданої послідовності. STL_algorithmsMerge / merge template
K5.merge Утворює нову відсортовану послідовність dest злиттям двох заданих. Повертає end-ітератор отриманої послідовності. Попередньо обидві послідовності мають бути впорядкованими одним і тим же способом, використовуючи 1) operator<(); 2) бінарний предикат ( глобальну функцію чи operator()() об’єкта-функції), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Результат буде впорядкований, як і у вхідних послідовностях. Якщо задані послідовності містять еквівалентні елементи, то в результуючій послідовності першими йтимуть елементи першої заданої послідовності. STL_algorithmsMerge / inplace_merge template
K7. Алгоритми для роботи з купою Купа – бінарне дерево (довільний вузол не більший батьківського вузла), реалізоване у вигляді послідовності. Такий спосіб інтепретації послідовності гарантує такі властивості: 1) швидкий вибір на перше місце найбільшого з усіх елементів; 2) час додавання і вилучення нового елемента завжди обмежений log N. Операції порівняння виконуються, використовуючи 1) operator<(); 2) бінарний предикат ( глобальну функцію чи operator()() об’єкта-функції), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Алгоритми для роботи з купою: make_heap, push_heap, pop_heap, sort_heap. STL_algorithmsHeap
K7. make_heap template
K7. push_heap template
K7. pop_heap template
K7. sort_heap template
Прийоми моделювання структур даних Безпосереднє використання "правильного контейнера" STL "Якщо вагомих конкретних вимог немає, то беріть vector і спокійно працюйте, знаючи, що ви зробили правильний вибір..." гарантує мінімальні накладні затрати пам'яті( 0 байтів на 1 об'єкт) гарантує найшвидший доступ до елемента гарантує локальність посилань – сусідні за посиланням об'єкти реально сусідні в пам'яті гарантує найгнучкіші ітератори(довільного доступу) майже гарантовано найшвидкіші ітератори – у релізній версії еквівалентні вказівникам Г.Саттер, А.Александреску. Стандарти програмування на С++
Прийоми моделювання структур даних Розширення функціональності при наслідуванні від контейнера STL Інкапсулювання контейнера фіксованого типу DataStructureModelling/ringList Застосування адаптера – інкапсулювання контейнера в новому шаблоні, тип контейнера – параметр шаблону stack, queue, priority_queue Композиція контейнерів STL по схемі відображень DataStructureModelling/thesaurus згідно інших шаблонів проектування