Алгоритми STL Концепція ітераторів Концепцію типу ітератора формують

Скачать презентацию Алгоритми STL Концепція ітераторів Концепцію типу ітератора формують Скачать презентацию Алгоритми STL Концепція ітераторів Концепцію типу ітератора формують

7692-stl_algorithms_657.ppt

  • Количество слайдов: 19

>Алгоритми STL Алгоритми STL

>Концепція ітераторів Концепцію типу ітератора  формують три ключові положення: абстакція високого рівня щодо Концепція ітераторів Концепцію типу ітератора формують три ключові положення: абстакція високого рівня щодо роботи з набором даних після інкременту вказує на наступний елемент послідовності; забезпечує перевірку на співпадіння (рівність) з іншим ітератором.

>Категорії алгоритмів Алгоритми, які не змінюють послідовність  Алгоритми, які змінюють послідовність Алгоритми сортування Категорії алгоритмів Алгоритми, які не змінюють послідовність Алгоритми, які змінюють послідовність Алгоритми сортування Алгоритми двійкового пошуку для впорядкованих послідовностей Алгоритми злиття контейнерів Алгоритми для роботи з множинами Алгоритми для роботи з купою Алгоритми перестановки

>K6. Алгоритми для роботи з множинами Узагальнене трактування множини: впорядкована послідовність (для швидкодії) допустимі K6. Алгоритми для роботи з множинами Узагальнене трактування множини: впорядкована послідовність (для швидкодії) допустимі еквівалентні елементи (повторюваність) Для теоретико-множинного використання з послідовностями: впорядкованість елементи без повторення

>K6. includes Перевіряє, чи кожен член послідовності  [first2, last2) є також  членом K6. includes Перевіряє, чи кожен член послідовності [first2, last2) є також членом послідовності [first1, last1). Попередньо обидві послідовності мають бути впорядкованими одним і тим же способом, використовуючи 1) operator<(); 2) бінарний предикат ( глобальну функцію чи operator()() об’єкта-функції компаратора), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Якщо друга послідовність містять еквівалентні елементи, то результатом буде true лише при наявності в першій послідовності не меншого числа таких елементів. STL_algorithmsSet / includes template inline bool includes(In1 first1, In1 last1, In2 first2, In2 last2); template inline bool includes(In1 first1, In1 last1, In2 first2, In2 last2, Comp comp);

>K6. set_union Об’єднує дві послідовності в одну, на основі:     K6. set_union Об’єднує дві послідовності в одну, на основі: 1) operator<(); 2) бінарного предикату ( глобальної функції чи operator()() об’єкта-функції компаратора), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Попередньо задані послідовності мають бути впорядковані. Якщо вони містять еквівалентні елементи, то в результуючій послідовності кількість таких елементів співпадає з максимальним числом з кількості входжень у задані послідовності. STL_algorithmsSet / set_union template inline Out set_union(In1 first1, In1 last1, In2 first2, In2 last2, Out dest); template inline Out set_union(In1 first1, In1 last1, In2 first2, In2 last2, Out dest, Comp comp);

>K6. set_intersection Записує у вихідну послідовність  dest результат множинного перетину двох послідовностей. Повертає K6. set_intersection Записує у вихідну послідовність dest результат множинного перетину двох послідовностей. Повертає end-ітератор отриманої послідовності. Попередньо обидві послідовності мають бути впорядкованими одним і тим же способом, використовуючи 1) operator<(); 2) бінарний предикат ( глобальну функцію чи operator()() об’єкта-функції компаратора), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Результат буде впорядкований, як і у вхідних послідовностях. Якщо задані послідовності містять еквівалентні елементи, то в результуючій послідовності кількість таких елементів співпадає з мінімальним числом з кількості входжень у задані послідовності. STL_algorithmsSet / set_intersection template inline Out set_intersection (In1 first1, In1 last1, In2 first2, In2 last2, Out dest); template inline Out set_intersection (In1 first1, In1 last1, In2 first2, In2 last2, Out dest, Comp comp);

>K6. set_difference Записує у вихідну послідовність  dest ті елементи, які входять у першу K6. set_difference Записує у вихідну послідовність dest ті елементи, які входять у першу і не входять у другу послідовність. Повертає end-ітератор отриманої послідовності. STL_algorithmsSet / set_difference template inline Out set_difference (In1 first1, In1 last1, In2 first2, In2 last2, Out dest); template inline Out set_difference(In1 first1, In1 last1, In2 first2, In2 last2, Out dest, Comp comp);

>K6.set_symmetric_difference Записує у вихідну послідовність  dest ті елементів, які входять в одну і K6.set_symmetric_difference Записує у вихідну послідовність dest ті елементів, які входять в одну і тільки в одну із заданих послідовностей. Повертає end-ітератор отриманої послідовності. Результат буде впорядкований, як і у вхідних послідовностях. Якщо задані послідовності містять еквівалентні елементи, то в результуючій послідовності кількість таких елементів співпадає з модулем різниці чисел входжень у задані послідовності. STL_algorithmsSet / set_symmetric_difference template inline Out set_symmetric_difference (In1 first1, In1 last1, In2 first2, In2 last2, Out dest); template inline Out set_symmetric_difference (In1 first1, In1 last1, In2 first2, In2 last2, Out dest, Comp comp);

>K5. Алгоритми злиття контейнерів K5. Алгоритми злиття контейнерів

>K5.merge Утворює нову відсортовану послідовність dest злиттям двох заданих. Повертає end-ітератор отриманої послідовності. Попередньо K5.merge Утворює нову відсортовану послідовність dest злиттям двох заданих. Повертає end-ітератор отриманої послідовності. Попередньо обидві послідовності мають бути впорядкованими одним і тим же способом, використовуючи 1) operator<(); 2) бінарний предикат ( глобальну функцію чи operator()() об’єкта-функції), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Результат буде впорядкований, як і у вхідних послідовностях. Якщо задані послідовності містять еквівалентні елементи, то в результуючій послідовності першими йтимуть елементи першої заданої послідовності. STL_algorithmsMerge / merge template inline Out merge (In1 first1, In1 last1, In2 first2, In2 last2, Out dest); template inline Out merge (In1 first1, In1 last1, In2 first2, In2 last2, Out dest, Comp comp);

>K5.merge Утворює нову відсортовану послідовність dest злиттям двох заданих. Повертає end-ітератор отриманої послідовності. Попередньо K5.merge Утворює нову відсортовану послідовність dest злиттям двох заданих. Повертає end-ітератор отриманої послідовності. Попередньо обидві послідовності мають бути впорядкованими одним і тим же способом, використовуючи 1) operator<(); 2) бінарний предикат ( глобальну функцію чи operator()() об’єкта-функції), який повертає true, якщо перший і другий аргументи задовільняють умову впорядкування послідовностей, і false – у протилежному випадку. Результат буде впорядкований, як і у вхідних послідовностях. Якщо задані послідовності містять еквівалентні елементи, то в результуючій послідовності першими йтимуть елементи першої заданої послідовності. STL_algorithmsMerge / inplace_merge template inline void inplace_merge ( BidirIt first, BidirIt middle, BidirIt last); template < class BidirIt, class Comp> inline void inplace_merge (BidirIt first, BidirIt middle, BidirIt last, Comp comp);

>K7. Алгоритми для роботи з купою  Купа – бінарне дерево (довільний вузол не 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 <class RandIt> inline void make_heap (RandIt first, RandIt last); template K7. make_heap template inline void make_heap (RandIt first, RandIt last); template < class BidirIt, class Comp> inline void make_heap (BidirIt first, BidirIt last, Comp comp); Відображає послідовність в купу, в якій на першому місці буде найбільший з усіх її елементів.

>K7. push_heap  template <class RandIt> inline void push_heap (RandIt first, RandIt last); template K7. push_heap template inline void push_heap (RandIt first, RandIt last); template < class BidirIt, class Comp> inline void push_heap (BidirIt first, BidirIt last, Comp comp); Додає елемент з кінця послідовності на першу позицію існуючої купи, яка вміщує всі попередні елементи послідовності.

>K7. pop_heap  template <class RandIt> inline void pop_heap (RandIt first, RandIt last); template K7. pop_heap template inline void pop_heap (RandIt first, RandIt last); template < class BidirIt, class Comp> inline void pop_heap (BidirIt first, BidirIt last, Comp comp); Вилучає (найбільший) елемент з початку існуючої купи, переміщуючи його в кінець послідовності, і формує нову купу так, що найбільший з решти елементів стає на перше місце. Фактичний розмір послідовності не змінюється. Для реального вилучення елемента використовують метод контейнера.

>K7. sort_heap  template <class RandIt> inline void sort_heap (RandIt first, RandIt last); template K7. sort_heap template inline void sort_heap (RandIt first, RandIt last); template < class BidirIt, class Comp> inline void sort_heap (BidirIt first, BidirIt last, Comp comp); Перетворює купу у впорядковану послідовність, структура бінарного дерева зникає (послідовність перестає бути купою). Складність – логарифмічна.

>Прийоми моделювання структур даних Безпосереднє використання Прийоми моделювання структур даних Безпосереднє використання "правильного контейнера" STL "Якщо вагомих конкретних вимог немає, то беріть vector і спокійно працюйте, знаючи, що ви зробили правильний вибір..." гарантує мінімальні накладні затрати пам'яті( 0 байтів на 1 об'єкт) гарантує найшвидший доступ до елемента гарантує локальність посилань – сусідні за посиланням об'єкти реально сусідні в пам'яті гарантує найгнучкіші ітератори(довільного доступу) майже гарантовано найшвидкіші ітератори – у релізній версії еквівалентні вказівникам Г.Саттер, А.Александреску. Стандарти програмування на С++

>Прийоми моделювання структур даних Розширення функціональності при наслідуванні від контейнера STL Інкапсулювання контейнера фіксованого Прийоми моделювання структур даних Розширення функціональності при наслідуванні від контейнера STL Інкапсулювання контейнера фіксованого типу DataStructureModelling/ringList Застосування адаптера – інкапсулювання контейнера в новому шаблоні, тип контейнера – параметр шаблону stack, queue, priority_queue Композиція контейнерів STL по схемі відображень DataStructureModelling/thesaurus згідно інших шаблонів проектування