Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
77
Добавлен:
07.03.2016
Размер:
1.78 Mб
Скачать

Void main ()

{

int m[8] = {1, 60, 60, 25, 25, 2, 13, 35};

cout << *(adjacent_find(m, m + 8)); //Виведення: 60

A ma[5] = {{2,4}, {3,1}, {2,2}, {1,2}, {1,2}};

//Виведення: 3

cout<<"\n"<<(*adjacent_find(ma, ma+5, f)).x << endl;

};

Алгоритм count_if розглянутий вище в цьому розділі.

Алгоритми find та find_if виконують відповідно пошук заданого значення і пошук значення, відповідного заданому предикату pred. Приклад:

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

class In

{

public:

bool operator()(int x) {return x > 10 && x < 50;}

};

Void main()

{

int mas[] = {1, 2, 33, 4, 5, 66, 7, 8, 9};

vector <int> vec;

vector<int>::iterator f;

for (int i = 0; i < 9; i++)

{

vec.push_back(mas[i]);

cout << vec[i] << " ";

}

cout <<"\n";

// Пошук елементу, рівного 66:

cout << *find(vec.begin(), vec.end(), 66) << endl;

// Пошук елементу, що задовольняє умові 10<х<50:

f = find_if(vec.begin(), vec.end(), In());

if(f == vec.end())

cout<<"Немає елементу в послідовності";

else cout << *f;

}

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

1 2 33 4 5 66 7 8 9

66

33

Алгоритм for_each викликається для перегляду елементів контейнера. У нього можна передавати вказівку на функцію, яку потрібно викликати для кожного елементу контейнера, який треба переглянути:

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

void show(int a){ cout << a << " ";}

Void main()

{

int m[4] = {3, 5, 9, 6};

int mas[] = {1,2,33,4,5,66,7,8,9};

vector <int> vec;

for (int i = 0; i < 9; i++)

vec.push_back(mas[i]);

for_each(mas, mas+9, show);

cout << "\n";

for_each(m, m + 4, show);

}

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

1 2 33 4 5 66 7 8 9

3 5 9 6

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

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

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

Алгоритм

Виконувана функція

сору

Копіювання послідовності, починаючи з першого елементу

сору_backward

Копіювання послідовності, починаючи з останнього елементу

fill

Заміна всіх елементів заданим значенням

fill_n

Заміна перших n елементів заданим значенням

generate

Заміна всіх елементів результатом операції

generate_n

Заміна перших n елементів результатом операції

iter_swap

Обмін місцями двох елементів, заданих ітераторами

random_shuffle

Переміщення елементів відповідно до випадкового рівномірного розподілу

remove

Переміщення елементів із заданим значенням

remove_copy

Копіювання послідовності з переміщенням елементів із заданим значенням

remove_copy_if

Копіювання послідовності з переміщенням елементів при виконанні предиката

remove_if

Переміщення елементів при виконанні предиката

replace

Заміна елементів із заданим значенням

replace_copy

Копіювання послідовності із заміною елементів із заданим значенням

replace_copy_if

Копіювання послідовності із заміною елементів при виконанні предиката

replace_if

Заміна елементів при виконанні предиката

reverse

Зміна порядку елементів на зворотний

Продовження таблиці 11.4

Алгоритм

Виконувана функція

reverse_copy

Копіювання послідовності в зворотному порядку

rotate

Циклічне переміщення елементів послідовності

rotate_copy

Циклічне копіювання елементів

swap

Обмін місцями двох елементів

swap_ranges

Обмін місцями елементів двох послідовностей

transform

Виконання заданої операції над кожним елементом послідовності

unique

Видалення рівних сусідніх елементів

unique_copy

Копіювання послідовності з видаленням рівних сусідніх елементів

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

Приклад використання алгоритмів copy, copy_backward

#include <iostream>

#include <functional>

#include <algorithm>

using namespace std;