Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
###Cpp_лкц1_1.09_11_#дляБАК#29_01_12.doc
Скачиваний:
40
Добавлен:
29.04.2019
Размер:
6.42 Mб
Скачать

Глава 14. Алгоритмы

349

Таблица 14.2, Модифицирующие операции с последовательностями

Алгоритм

Выполняемая функция

сору

Копирование последовательности, начиная с первого элемента

| copy backward

Копирование последовательности, начиная с последнего элемента

I fill

Замена всех элементов заданным значением

| f111_n

Замена первых п элементов заданным значением

1 generate

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

generate n

Замена первых п элементов результатом операции

1 iter_swap

Обмен местами двух элементов, заданных итераторами

random_shuffle

Перемещение элементов в соответствии со случайным равномерным распределением

remove

Перемещение элементов с заданным значением

remove_copy

Копирование последовательности с перемещением элементов с заданным значением

remove_copy_if

Копирование последовательности с перемещением элементов при выполнении предиката

remove_if

Перемещение элементов при выполнении предиката

1 replace

Замена элементов с заданным значением

replace_copy

Копирование последовательности с заменой элементов с заданным значением

replace_copy_if

Копирование последовательности с заменой элементов при выполнении предиката

replace_if

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

reverse

Изменение порядка элементов на обратный

reverse_copy

Копирование последовательности в обратном порядке

rotate

Циклическое перемещение элементов последовательности

rotate_copy

Циклическое копирование элементов

swap

Обмен местами двух элементов

swap_ranges

Обмен местами элементов двух последовательностей

transform

Выполнение заданной операции над каждым элементом последовательности

unique

Удаление равных соседних элементов

unique_copy

Копирование последовательности с удалением равных соседних элементов

Рассмотрим эти алгоритмы подробнее.

350

Часть III. Стандартная библиотека

copy, copy_backward

Алгоритм сору выполняет копирование начиная с первого элемента последовательности, границы которой задаются итераторами first и last, в выходную последовательность, для которой задается итератор начала result:

tempiate<class In, class Out>

Out copy(In first, In last. Out result); Алгоритм copyjDackward выполняет копирование, начиная с последнего элемента заданной последовательности. Третий параметр должен указывать на элемент, следующий за последним элементом приемника, поскольку его значение уменьшается на шаг перед операцией копирования каждого элемента:

tempiate<class Bil, class Bi2>

Bi2 copy_backward(Bil first, Bil last, Bi2 result):

Последовательности могут перекрываться. При копировании нужно следить за тем, чтобы не выйти за границы выходной последовательности.

Пример копирования последовательности:

#include <iostream> #include <algorithm> using namespace std; int 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]; //2345

cout « endl;

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

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

cout « endl:

copy__backward (b. b + 3. b + 4);

for (i = 0; i < 4; i++) cout « b[i]: //2234

cout « endl:

return 0: } Алгоритм copy можно применять также для ввода и вывода последовательности. Для этого третьим параметром задается потоковый итератор (см. с. 333):

#include <iostream> #include <algorithm> using namespace std: int main(){

const int N = 5:

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

copy (a. a + N. ostream_iterator<int>(cout. " ")):

cout « endl:

return 0; }