Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

22.6.2. Видалення і заміна елементів

Іноді корисно згенерувати нову послідовність, яка складатиметься тільки з певних елементів початкової послідовності. Одним з алгоритмів, який може справитися з цим завданням, є remove_copy(). Його загальний формат має такий вигляд:

template <class ForIter, class OutIter, class myType>

OutIter remove_copy(InIter start, InIter end,

OutIter result, const myType &val);

Алгоритм remove_copy() копіює з вилученням із заданого діапазону елементи, які дорівнюють значенню val, і поміщає результат у послідовність, яка адресується параметром resultАлгоритм повертає ітератор, який вказує на кінець результату. Контейнер-приймач повинен бути достатньо великим, щоб прийняти отриманий результат.

Щоб у процесі копіювання у послідовності один елемент замінити іншим, використовується алгоритм replace_copy(). Його загальний формат має такий вигляд:

template <class ForIter, class OutIter, class myType>

OutIter replace_copy(InIter start, InIter end,

OutIter result, const myType &old, Const myType &new);

Алгоритм replace_copy() копіює елементи із заданого діапазону у послідовність, яка адресується параметром result. У процесі копіювання відбувається заміна елементів, які мають значення old, елементами, які мають значення new. Алгоритм поміщає результат у послідовність, яка адресується параметром result, і повертає ітератор, який вказує на кінець цієї послідовності. Контейнер-приймач повинен бути достатньо великим, щоб прийняти отриманий результат.

У наведеному нижче коді програми продемонстровано механізм використання алгоритмів remove_copy() і replace_copy(). Під час її виконання створюється послідовність символів, з якої віддаляються всі букви 'е'. Потім виконується заміна всіх букв 'е' буквами 'x'.

Код програми 22.14. Демонстрація механізму використання алгоритмів remove_copy і replace_copy

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

#include <vector> // Для роботи контейнерним класом "Вектор"

#include <algorithm> // Для роботи з алгоритмами бібліотеки STL

using namespace std; // Використання стандартного простору імен

int main()

{

char str[] = "Це дуже простий тест.";

vector<char> vek, vek2(30);

unsigned int i;

for(i=0; str[i]; i++) vek.push_back(str[i]);

// **** Демонстрація алгоритму remove_copy ****

cout << "Вхідна послідовність: ";

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

cout << endl;

// Видаляємо всі букви 'е'.

remove_copy(vek.begin(), vek.end(), vek2.begin(), 'т');

cout << "Після видалення букв 'т': ";

for(i=0; vek2[i]; i++) cout << vek2[i];

cout << endl << endl;

// **** Демонстрація алгоритму replace_copy ****

cout << "Вхідна послідовність: ";

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

cout << endl;

// Замінюємо букви 'е' буквами 'Х'.

replace_copy(vek.begin(), vek.end(), vek2.begin(), 'o', 'x');

cout << "Після заміни букв 'е' буквами 'X': ";

for(i=0; vek2[i]; i++) cout << vek2[i];

cout << endl << endl;

getch(); return 0;

}

Результати виконання цієї програми є такими:

Вхідна послідовність: Це дуже простий тест.

Після видалення букв 'е': Ц дуж простий тст.

Вхідна послідовність: Це дуже простий тест.

Після заміни букв 'е' буквами 'X': ЦХ дужХ простий тХст.