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

stl_algorithms.ppt

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

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

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

Категорії алгоритмів 1. 2. 3. 4. 5. 6. 7. 8. Алгоритми, які не змінюють Категорії алгоритмів 1. 2. 3. 4. 5. 6. 7. 8. Алгоритми, які не змінюють послідовність Алгоритми, які змінюють послідовність Алгоритми сортування Алгоритми двійкового пошуку для впорядкованих послідовностей Алгоритми злиття контейнерів Алгоритми для роботи з множинами Алгоритми для роботи з купою Алгоритми перестановки

K 1. for_each & count template<class In, class Funct> Funct for_each(In first, In last, K 1. for_each & count template Funct for_each(In first, In last, Funct f); Застосовує об’єкт-функцію f до кожного елемента послідовності. template typename iterator_traits: : difference_type count(In first, In last, const T& value); template typename iterator_traits: : difference_type count_if(In first, In last, Pred pred) Повертає кількість входжень у послідовність заданого значення value, або значень, для яких виконується предикат pred.

K 1. find template <class In, class T> In find(In first, In last, const K 1. find template In find(In first, In last, const T& value); template In find_if(In first, In last, Pred pred); Повертає ітератор для першого з елементів послідовності, який співпадає із заданим значенням value або задовольняє предикат pred. Якщо елемент не знайдено – повертає last. template For 1 find_end(For 1 first 1, For 1 last 1, For 2 first 2, For 2 last 2); template For 1 find_end(For 1 first 1, For 1 last 1, For 2 first 2, For 2 last 2, Bi. Pred pred); Шукає останнє входження другої послідовності в першу і повертає ітератор на перший елемент підпослідовності. У першому випадку елементи перевіряються на рівність, у другому – на виконання предикату pred.

K 1. find template <class For 1, class For 2> For 1 find_first_of(For 1 K 1. find template For 1 find_first_of(For 1 first 1, For 1 last 1, For 2 first 2, For 2 last 2); template For 1 find_first_of(For 1 first 1, For 1 last 1, For 2 first 2, For 2 last 2, Bi. Pred pred); Повертає ітератор для першого елемента з послідовності [first 1, last 1), значення якого входить у послідовність [first 2, last 2), або задовольняє бінарний предикат pred. template For adjacent_find(For first, For last); template For adjacent_find(For first, For last, Bi. Pred pred); Повертає ітератор для першого з двох сусідніх елементів послідовності, які рівні за значенням або задовольняють предикат pred.

K 1. mismatch & equal template <class In 1, class In 2> pair<In 1, K 1. mismatch & equal template pair mismatch(In 1 first 1, In 1 last 1, In 2 first 2); template pair mismatch(In 1 first 1, In 1 last 1, In 2 first 2, Bin. Pred pred); Повертає пару ітераторів для першої пари елементів двох послідовностей, які не рівні між собою, або для яких не виконується предикат pred. template bool equal(In 1 first 1, In 1 last 1, In 2 first 2); template bool equal(In 1 first 1, In 1 last 1, In 2 first 2, Bin. Pred pred); Перевіряє чи рівні між собою або задовольняють предикат pred відповідні пари елементів у послідовностях.

K 1. min_element & max_element template <class For> For min_element(For first, For last); template K 1. min_element & max_element template For min_element(For first, For last); template For min_element(For first, For last, Comp comp); template For max_element(For first, For last); template For max_element(For first, For last, Comp comp); Повертає позицію першого мінімального/максимального елемента в послідовності, використовуючи для порівняння елементів 1), 3) operator<(); 2), 4) функцію-предикат, яка повертає true, якщо перший елемент менший за другий, і false в протилежному випадку.

K 1. min & max & lexicographical_compare template <class T, class Comp> const T& K 1. min & max & lexicographical_compare template const T& min(const T& a, const T& b, Comp comp); template const T& max(const T& a, const T& b, Comp comp); Знаходить менше (більше) з двох значень, на основі порівнянь. template bool lexicographical_compare(In 1 first 1, In 1 last 1, In 2 first 2, In 2 last 2); template bool lexicographical_compare(In 1 first 1, In 1 last 1, In 2 first 2, In 2 last 2, Comp comp); Лексикографічне порівняння двох послідовностей.

K 2. transform template <class In, class Out, class Unary. Oper> Out transform(In first, K 2. transform template Out transform(In first, In last, Out result, Unary. Oper op); template Out transform(In 1 first 1, In 1 last 1, In 2 first 2, Out result, Bin. Oper op); Вихідна послідовність формується з результатів послідовного застосування: 1) унарної операції op до елементів вхідної послідовності; 2) бінарної операції op до пар відповідних елементів вхідних послідовностей.

K 2. fill & generate template <class For, class T> void fill(For first, For K 2. fill & generate template void fill(For first, For last, const T& value); template void fill_n(Out first, Size n, const T& value); ]Присвоює всім (або n першим) елементам послідовності задане значення value. template void generate(For first, For last, Generator g); template void generate_n(Out first, Size n, Generator g); Послідовно викликає функцію g() і присвоює повернутий нею результат всім (або n першим) елементам послідовності.

K 2. copy & copy_backward template <class In, class Out> Out copy(In first, In K 2. copy & copy_backward template Out copy(In first, In last, Out result); template Bi 2 copy_backward(Bi 1 first, Bi 1 last, Bi 2 result); Копіює значення елементів вхідної послідовності у вихідну; ітератор-результат адресує result+(last-first). У другому варіанті копіювання виконується у зворотному порядку; ітератор-результат адресує result-(last-first). Не створюють і не вставляють нові елементи у вихідну послідовність, а лише заміщують.

K 2. replace & replace_if template <class For, class T> void replace(For first, For K 2. replace & replace_if template void replace(For first, For last, const T& value, const T& new_value); template void replace_if(For first, For last, Pred pred, const T& new_value); Замінює новим значення new_value ті елементи послідовності, які: 1) співпадають із заданим value; 2) задовольняють предикат pred.

K 2. replace_copy & replace_copy_if template <class In, class Out, class T> Out replace_copy(In K 2. replace_copy & replace_copy_if template Out replace_copy(In first, In last, Out result, const T& value, const T& new_value); template Out replace_copy_if (In first, In last, Out result, Pred pred, const T& new_value); Копіює вхідну послідовність у вихідну починаючи з позиції result із заміною на new_value тих значень елементів, які: 1) співпадають із заданим value; 2) задовольняють предикат pred.

K 2. remove & remove_if template <class For, class T> For remove(For first, For K 2. remove & remove_if template For remove(For first, For last, const T& value); template For remove_if(For first, For last, Pred pred); З послідовності вилучаються елементи, значення яких: 1) співпадають із заданим value; 2) задовольняють предикат pred. Повертає ітератор на перший елемент після модифікованої послідовності.

K 2. remove_copy & remove_copy_if template <class In, class Out, class T> Out remove_copy(In K 2. remove_copy & remove_copy_if template Out remove_copy(In first, In last, Out result, const T& value); template Out remove_copy_if(In first, In last, Out result, Pred pred); У вихідну послідовність копіюються елементи вхідної, за винятком тих елементів, значення яких: 1) співпадають із заданим value; 2) задовольняють предикат pred.

K 2. unique template <class For> For unique(For first, For last); template <class For, K 2. unique template For unique(For first, For last); template For unique(For first, For last, Bin. Pred pred); Переміщує на початок елементи, беручи лише перший елемент з кожної групи елементів-сусідів, які: 1) співпадають; 2) задовольняють предикат pred.

K 2. unique_copy template <class In, class Out unique_copy(In first, Out> In last, Out K 2. unique_copy template In last, Out result); Out, class Bin. Pred> In last, Out result, Bin. Pred pred); Копіює у вихідну послідовність перший з групи сусідніх елементів вхідної послідовності, які: 1) співпадають; 2) задовольняють предикат pred.

K 2. rotate & rotate_copy template <class For> void rotate(For first, For middle, For K 2. rotate & rotate_copy template void rotate(For first, For middle, For last); template Out rotate_copy(For first, For middle, For last, Out result); 1) Циклічно переставляє елементи у вхідній послідовності, поки елемент, заданий middle, не стає на перше місце. 2) Циклічно переставляє елементи вхідної послідовності аналогічно rotate, копіюючи їх у вихідну послідовність.

K 2. reverse & reverse_copy template <class Bi> void reverse(Bi first, Bi last); template K 2. reverse & reverse_copy template void reverse(Bi first, Bi last); template Out reverse_copy(Bi first, Bi last, Out result); 1) Переставляє елементи заданої послідовності у зворотному порядку. 2) Копіює у результуючий інтервал (починаючи з result) елементи вхідної послідовності, змінюючи їх порядок на зворотній.

K 2. random_shuffle template <class Ran> void random_shuffle(Ran first, Ran last); template <class Ran, K 2. random_shuffle template void random_shuffle(Ran first, Ran last); template void random_shuffle(Ran first, Ran last, Gen& rand); Тасує елементи послідовності, використовуючи: 1) генератор рівномірно розподілених випадкових чисел; 2) генератор класу Gen.

K 2. partition & stable_partition template <class Bi, class Pred> Bi partition(Bi first, Bi K 2. partition & stable_partition template Bi partition(Bi first, Bi last, Pred pred); template Bi stable_partition(Bi first, Bi last, Pred pred); • Розділяє результуючим ітератором задану послідовність на частини, розміщуючи елементи, які задовольняють предикатові pred, перед тими, які йому не задовольняють: 1) без збереження попереднього відносного порядку; 2) зберігаючи попередній відносний порядок між елементами. • Результат – ітератор на перший елемент, який не задовільняє критерій

K 2. swap template <class T> void swap(T& a, T& b); template <class For K 2. swap template void swap(T& a, T& b); template void iter_swap(For 1 a, For 2 b) template For 2 swap_ranges(For 1 first 1, For 1 last 1, For 2 first 2); Переставляє місцями значення, задані одним із способів: 1) аргументами-значеннями; 2) ітераторами; 3) діапазоном елементів.

K 3. Алгоритми сортування K 3. Алгоритми сортування

K 3. sort & stable_sort template <class Ran> void sort(Ran first, Ran last); template K 3. sort & stable_sort template void sort(Ran first, Ran last); template void sort(Ran first, Ran last, Comp comp); template void stable_sort(Ran first, Ran last, Comp comp); • Сортує елементи вхідної послідовності, на основі: 1) • • operator <(); 2), 3) бінарної функції-предиката, яка повертає true, якщо перший та другий аргументи задовільняють потрібному порядку, і false в протилежному випадку Відносний порядок еквівалентних елементів 1) і 2) не зберігає 3) зберігає Складність 1) і 2) у середньому O(N log N) порівнянь 3) у середньому O(N log N) порівнянь при наявності додаткової пам’яті, інакше в найгіршому випадку O( N ( log N) )

K 3. partial_sort template <class Ran> void partial_sort(Ran first, Ran sort. End , Ran K 3. partial_sort template void partial_sort(Ran first, Ran sort. End , Ran last); template void partial_sort(Ran first, Ran sort. End , Ran last, Comp comp); • Частково впорядковує елементи вхідної послідовності, припиняючи роботу, коли елементи на інтервалі [first, sort. End) задовільняють критерій сортування: 1) operator <(); 2) бінарної функції-предиката, яка повертає true, якщо перший та другий аргументи задовільняють потрібному порядку, і false в протилежному випадку • Складність у середньому O(N log N) порівнянь

K 3. partial_sort_copy template<class In, class Ran, class Comp> Ran partial_sort_copy(In first, In last, K 3. partial_sort_copy template Ran partial_sort_copy(In first, In last, Ran res_first, Ran res_last); template Ran partial_sort_copy(In first, In last, Ran res_first, Ran res_last, Comp comp); Копіює у вихідну послідовність min((last-first), (res_last-res_first)) елементів вибраних з першої послідовності по порядку на основі 1) operator <(); 2) бінарної функції-предиката, яка повертає true, якщо перший та другий аргументи задовільняють потрібному порядку, і false в протилежному випадку

K 3. nth_element template <class Ran> void nth_element(Ran first, Ran nth, Ran last) template K 3. nth_element template void nth_element(Ran first, Ran nth, Ran last) template void nth_element(Ran first, Ran nth, Ran last, Comp comp); • Розбиває вхідну послідовність, утворюючи два інтервали, розділені елементом в позиції nth. При цьому кожен елемент першого інтервалу є менший або рівний елемента в позиції nth, а кожен елемент після нього є більшим або рівним елементу в позиції nth. В інтервалах впорядкування не гарантоване, в обох інтервалах може зустрічатися елемент, еквівалентний елементу в позиції nth • Порівняння виконується: 1) operator <(); 2) бінарною функцєюї-предикатом, яка повертає true, якщо перший та другий аргументи задовільняють потрібному порядку, і false в протилежному випадку. • Складність в середньому лінійна

K 4. Алгоритми двійкового пошуку для впорядкованих послідовностей K 4. Алгоритми двійкового пошуку для впорядкованих послідовностей

K 4. template <class For, class T> bool binary_search(For first, For last, const T& K 4. template bool binary_search(For first, For last, const T& value); template bool binary_search(For first, For last, const T& value, Comp comp); • Перевіряє чи входить у впорядковану послідовність елемент зі значенням value • Порівняння виконується: 1) operator <(); 2) бінарною функцєюї-предикатом, яка повертає true, якщо перший та другий аргументи задовільняють потрібному порядку, і false в протилежному випадку. • Складність логарифмічна для ітераторів довільного доступу і лінійна для інших