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

Void main()

{

int b[4], a[5] = {1, 2, 3, 4, 5}, i;

copy (a + 1, a + 5, b);

for (i = 0; i < 4; i++) cout << b[i]; // 2 3 4 5

cout << endl;

copy (a + 1, a + 5, a);

for (i = 0; i < 5; i++) cout <<a[i]; // 2 3 4 5 5

cout << endl;

copy_backward (b, b + 3,b + 4);

for (i = 0; i < 4; i++) cout << b[i]; // 2 2 3 4

cout << endl;

}

Алгоритм copy можна застосовувати також для введення і виведення послідовності. Для цього третім параметром задається потоковий ітератор:

#include <iostream>

#include <algorithm>

using namespace std;

Void main()

{

const int N = 5;

int a[N] = {1, 2, 3, 4, 5};

copy (a, a + N, ostream_iterator<int>(cout," " ) );

cout << endl;

}

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

1 2 3 4 5

У наступному прикладі розглядається копіювання вектору (vector) у список (list), використовуючи ітератори back_inserter(), front_inserter(), inserter().

#include <iostream>

#include <vector>

#include <list>

using namespace std;

Void main()

{

int a[5] = {1,2,3,4,5};

vector <int> w(a, a+5);

list <int> L;

list<int>::iterator ff = L.begin();

copy (w.begin(),w.end(), back_inserter(L));

copy (w.begin(),w.end(), front_inserter(L));

copy (w.begin(),w.end(), inserter(L,L.begin()));

cout <<"insert\n";

for (ff = L.begin();ff != L.end();ff++)

cout <<*ff <<" " ;

}

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

insert

1 2 3 4 5 5 4 3 2 1 1 2 3 4 5

Наведемо приклад використання алгоритмів fill, flll_n:

#include <iostream>

#include <algorithm>

using namespace std;

Void main()

{

int a[5], i;

fill (a, a + 5,1);

for (i = 0; i < 5; i++) cout << a[i]; // 1 1 1 1 1

cout <<endl;

fill_n(a + 2, 2, 0);

for (i = 0; i < 5; i++) cout << a[i]; // 1 1 0 0 1

cout << endl;

}

Наведемо приклад використання алгоритму generate:

#include <iostream>

#include <algorithm>

using namespace std;

int f ()

{

static int i = 1;

return (++i) * 3;

}

Void main()

{

int a[5],i;

generate(a,a + 5,f);

// 6 9 12 15 18

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

cout << a[i] << " ";

}

У даному прикладі елементи заповнюються за допомогою функції f().

Алгоритм random_shuffle. Цей алгоритм виконує переміщення (перетасовування) елементів відповідно до випадкового рівномірного розподілу. Третім параметром алгоритму можна задати генератор випадкових чисел. Це дозволяє отримувати різні результати при кожному запуску програми. Генератор може бути функцією або функціональним об'єктом, одержуючим аргумент n типу int та що повертає ціле число в діапазоні від 0 до n.

#include <iostream>

#include <algorithm>

#include <time.h>

using namespace std;

struct random_gen

{

random_gen(){srand((unsigned int)time(NULL));}

int operator()(int n){return rand() % n;}

};

Void main()

{

int a[5] = {1,2,3,4,5};

random_shuffle(a, a + 5,random_gen());

// 5 3 4 1 2

for (int i = 0; i < 5; i++) cout << a[i] << " ";

cout << endl;

}

Алгоритми remove, remove_if. Приклад застосування remove для видалення елементів вектора, значення яких дорівнюють 2:

#include <iostream>

#include <algorithm>

#include <vector>

using namespace std;

Void main()

{

vector<int> a;

int i;

for (i = 0; i < 5; i++) a.push_back(i);

for (i = 0; i < 5; i++) a.push_back(i);

for (i = 0; i < a.size(); i++) cout<<a[i];

cout<<endl;

vector<int>::iterator k,p;

p = remove(a.begin(), a.end(),2);

for (i = 0; i < a.size(); i++) cout << a [i];

cout << endl;

for (k = a.begin(); k != p; k++) cout << *k;

}

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

0123401234

0134013434

01340134

Приклад застосування remove_if спільно з методом erase для видалення елементів вектора, значення яких лежать в межах від 10 до 50:

#include <iostream>

#include <algorithm>

#include <vector>

using namespace std;

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