стандартні алгоритми

Крім контейнерів стандартна бібліотека містить велику кількість алгоритмів (близько 60). Алгоритм STL- це алгоритм в прямому сенсі слова, тобто деяка операція, яка виконується над деякими даними. Всі алгоритми обробляють дані представлені в вигляді послідовності, заданої двома ітераторами. Це означає, що алгорітмиSTLмогут обробляти як вміст стандартних контейнеровSTL, так і нестандартних (але сумісних з ними), а також будь-якій послідовності представленої паройSTLсовместімих ітераторів.

// програма виводить латинський алфавіт

using namespace std;

int main (int, char **)

for (i = 0; i <26; i++)

Стандартні алгоритми здійснюють такі часто зустрічаються дії, як пошук, підрахунок, заміну, видалення, різні види сортування. При цьому всі стандартні алгоритми можна розділити на дві групи: модифікують послідовність і немодіфіцірующіе послідовність. Зазвичай серед модифікують алгоритмів виділяють алгоритми сортування.

оброблювані послідовності

Необхідно відзначити, що всі стандартні алгоритми, приймають в якості оброблюваної послідовності, послідовність виду [iterator_first; iterator_last), гдеiterator_first- итератор вказує на перший елемент послідовності, iterator_last- итератор, який вказує на елемент послідовності, що настає за останнім (законечний елемент).

Також необхідно відзначити, що алгоритми не здійснюють перевірку переданих їм даних, тобто передані стандартним алгоритмам послідовності повинні бути дійсними, iterator_lastдолжен бути досяжний ізiterator_firstза кінцеве (можливо нульове) число кроків. У разі якщо послідовність є неприпустимою, поведінка програми не визначено.

vector vec1 (10); // вектор з 10 елементів

vector vec2 (100); // вектор з 10 елементів

// [vec1.begin () + 5; vec1.begin ()) - неприпустима послідовність,

// незважаючи на те, що окремо ітератори дійсні

// vec1.begin () недосяжний через vec1.begin () + 5

// [vec1.begin () + 50; vec1.end ()) - неприпустима послідовність,

// vec1.begin () + 50 - недійсний итератор

// [vec1.begin (); vec2.end ()) - неприпустима послідовність,

// ітератори належать різних контейнерах

Деякі алгоритми 1. приймають в якості вхідних даних дві послідовності. Перша послідовність задана, як зазвичай, парою ітераторів [first1; last1), а друга толькоfirst2 - ітератором, що вказує на початок послідовності. В цьому випадку зазвичай передбачається, що довжина другої послідовності по вкрай мері не менше довжини першої послідовності, тобто итератор застосування до ітераторуfirst2 операцііoperator ++ (last1 -first1) раз не повинно призводити до того, що результуючий итератор стане недійсним.

Схожі статті