Алгоритми

 

Алгоритми STL призначені для роботи з контейнерами і іншими послідовностями. Кожен алгоритм реалізований у вигляді шаблону або набору шаблонів функції, тому може працювати з різними видами послідовностей і даними різноманітних типів. Для налаштування алгоритму на конкретні вимоги користувача застосовуються функціональні об'єкти. Використання стандартних алгоритмів, як і інших засобів стандартної бібліотеки, позбавляє програміста від написання, відлагодження і документування циклів обробки послідовностей, що зменшує кількість помилок в програмі, знижує час її розробки і робить її більш читаною і компактною. Оголошення стандартних алгоритмів знаходяться в заголовному файлі <algorithm>, стандартних функціональних об'єктів – у файлі <functional>.

Всі алгоритми STL можна розділити на чотири категорії:

– немодифікуючі операції з послідовностями;

– модифікуючі операції з послідовностями;

– алгоритми, пов'язані з сортуванням;

– алгоритми роботи з множинами і пірамідами;

Крім того, бібліотека містить узагальнені чисельні алгоритми, оголошення яких знаходяться у файлі <numeric>. В якості параметрів алгоритму передаються ітератори, що визначають початок і кінець оброблюваної послідовності. Вид ітераторів визначає типи контейнерів, для яких може використовуватися даний алгоритм. Наприклад, алгоритм сортування (sort) вимагає для своєї роботи ітератори довільного доступу, тому він не працюватиме з контейнером list. Алгоритми не виконують перевірку виходу за межі послідовності.

При описі параметрів шаблонів алгоритмів використовуються наступні скорочення:

In – ітератор для читання;

Out – ітератор для запису;

For – прямий ітератор;

Вi – двонаправлений ітератор;

Ran – ітератор довільного доступу;

Pred – унарний предикат (умова);

Binpred – бінарний предикат;

Соmр – функція порівняння;

Ор – унарна операція;

BinOp – бінарна операція.

 

11.3.1 Немодифікуючі операції з послідовностями

Алгоритми цієї категорії продивляються послідовність, не змінюючи її значень.

 

Таблиця 11.3. Немодифікуючі операції з послідовностями

 

Алгоритм Виконувана функція
adjacent_find Знаходження пари сусідніх значень
count Підрахунок кількості входжень значення в послідовність
count_if Підрахунок кількості виконань умови в послідовності
equal Попарна рівність елементів двох послідовностей
find Знаходження першого входження значення в послідовність
find_end Знаходження останнього входження однієї послідовності в іншу
find_first_of Знаходження першого значення з однієї послідовності в іншій
find_if Знаходження першої відповідності умові в послідовності
for_each Виклик функції для кожного елементу послідовності
mismatch Знаходження першого неспівпадаючого елементу в двох послідовностях
search Знаходження першого входження однієї послідовності в іншу
search_h Знаходження n-го входження однієї послідовності в іншу

 

Розглянемо приклади використання деяких алгоритмів.

Шаблон алгоритму adjacent_find:

 

tempiate<class For>For adjacent_find(For first,For last);

tempiate<class For, class BinPred>

For adjacent_find(For first, For last, BinPred pred);

 

Перша форма алгоритму знаходить в послідовному контейнері пару сусідніх однакових значень і повертає ітератор на перше з них або кінець послідовності (ітератор на елемент, наступний за останнім). Друга форма знаходить сусідні елементи, що задовольняють умові, заданій предикатом pred у вигляді функції або функціонального об'єкту.

Програма знаходження самої лівої пари однакових елементів цілочисельного масиву і пару елементів структури, у яких рівна сума полів):

 

#include <iostream>

#include <algorithm>

using namespace std;

 

struct A{ int x, y;};

bool f(A &a1, A& a2)

{

return a1.x + a1.y == a2.x + a2.y;

}

 








Дата добавления: 2014-12-26; просмотров: 1341;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.