Головна

Послідовні контейнери | Асоціативні контейнери | Set <int> intSet; // створює множину значень int | Адаптери контейнерів | Алгоритми | Функції користувача замість функціональних об'єктів | Додавання _if до аргументів | Вектори | Черги з двостороннім доступом | Ітератори як інтелектуальні вказівники |

До програми включений заголовочний файл ALGORITHM. В цьому файлі містяться оголошення алгоритмів STL.

  1. A20 Максимальна спектральна густина випромінювальної здатності абсолютно чорного тіла збільшується в 32 рази. В скільки разів збільшується при цьому його температура?
  2. B16 Температура абсолютно чорного тіла підвищується від 100 К до 300 К. В скільки разів збільшується при цьому його максимальна спектральна густина випромінювальної здатності?
  3. Алгоритм двоїстого симплекс-методу рішення задачі та опис програми.
  4. Аналіз навчальної програми з музики
  5. Антивірусні компанії та програми
  6. Безсумнівним при цьому залишається те положення, що головним еле­ментом структури адміністративного процесу є процесуальне провадження.
  7. Вимогам програми, захисту результатів практики

Діапазони.

Перші два аргументи оператора find визначають діапазон елементів, що переглядаються. Значення задаються ітераторами. В даному прикладі ми використали значення звичайних вказівників С++, що є окремими випадками ітераторів.

Перший параметр - це ітератор (тобто вказівник) першого значення, яке треба перевірити. Другий - ітератор останньої позиції (насправді він вказує позицію, наступну після останнього ітератора). Використовуваний при цьому синтаксис є варіацією на тему звичайного циклу for C++. Алгоритм find() звільнив нас від необхідності писати цикл for. Загалом же алгоритми заміняють собою складні і трудомісткі фрагменти програмного коду.

Алгоритм count()

Далі приведений приклад використовує алгоритм count(). Він підраховує, скільки елементів в контейнері мають дане значення.

#include<iostream>

#include<algorithm>

#include<conio>

using namespace std;

int arr[]={33,22,33,44,33,55,66,77};

int main()

{int n=count(arr,arr+8,33);//підрахунок к-сті входжень 33

cout<<"33 zustrichaetsa "<<n<<" raz v masyvi "<<endl;

return 0;

} Програма 26.2

Результат роботи програми

Алгоритм sort()

Призначення цього алгоритму - сортування контейнера.

#include<iostream>

#include<algorithm>

#include<conio>

using namespace std;

int arr[]={33,22,33,44,33,55,66,77};

int main()

{sort(arr,arr+8); //сортування

for(int j=0;j<8;j++)

cout<<arr[j]<<' ';

cout <<endl;

return 0;

}

Програма 26.3

Результат роботи програми

Алгоритм search()

Деякі алгоритми оперують одночасно двома контейнерами. Наприклад, якщо алгоритм find() шукає вказане значення в одному контейнері, алгоритм serch() шукає цілу послідовність значень, задану одним контейнером, в іншому контейнері. Приклад його використання приведено в програмі 26.4

#include<iostream>

#include<algorithm>

#include<conio>

using namespace std;

int source[]={11,44,33,11,22,33,11,22,44};

int pattern[]={11,22,33};

int main()

{

int *ptr;

ptr=search(source,source+9,pattern,pattern+3);

if(ptr==source+9)//зупинилися після останнього

cout<<"Spivpadinna ne znajdeno\n";

else

cout<<"Spivpadinna v pozycii "<<(ptr-source)<<endl;

getch();

return 0;

}

Програма 26.4

Результат роботи програми

Алгоритм шукає послідовність (11,12,13), задану масивом pattern, в масиві source. Якщо значення ітератора ptr опиняються за межами масиву source, виводиться відповідне повідомлення.

Параметрами алгоритму serch() і подібних на нього не зобов'язані бути контейнери одного типу. Вихідний контейнер може бути, наприклад, вектором, а маска пошуку - масивом. така універсальність є сильною стороною STL.

Алгоритм merge()

Цей алгоритм працює з трьома контейнерами, об'єднуючи елементи двох з них у третій, результатний. Приклад його викоритсання приведено в програмі 26.5

#include<iostream>

#include<conio>

#include<algorithm>

using namespace std;

int src1[]={2,3,4,6,8};

int src2[]={1,3,5};

int dest[8];

int main()

{

//обєднання src1 i src2 в dest

merge(src1,src1+5,src2,src2+3,dest);

for(int j=0;j<8;j++)

cout<<dest[j]<<' ';

cout<<endl;

getch();

return 0;

}

Програма 26.5

Результат роботи програми

Як бачимо, алгоритм об'єднання зберігає порядок елементів, вплітаючи вміст двох контейнерів у третій.



Ітератори | Функціональні об'єкти
© um.co.ua - учбові матеріали та реферати