Программирование >>  Расширенная версия языка c++ 

1 ... 148 149 150 [ 151 ] 152 153 154 ... 227


return 0;

После выполнения программы на экране появится следующее:

>

Последовательность: 21212121212121212121 ..... Результат: 22222222220000000000

3. Еще одним полезным алгоритмом является алгоритм CTSe{), который меняет порядок расположения элементов последовательности на обратный. Ниже представлена основная форма этого алгоритма:

1вщ)1аЪе<с1азз Bilter>

void reverse (Bllter начало, Bilter окончание) ;

Алгоритм тегяеО меняет на обратный порядок расположения элементов в диапазоне, заданном итераторами ало и окончание.

В следующем примере показана работа алгоритма reverse(). , . .t

Демонстрация алгоритма reverse ...... .

tinclude <iostream>

tinclude <vector>

tinclude <algorithm> . *

using namespace std;

int main()

{ -Ч: .

vector<int> v; .

int i;

cou< Исходная последовательность : ; for(i=0; Kv.aizeO; cout v[i] ;

cout

reverse (v.begin( ) ,v.end()) ;

cou Обратная последовательность: ; for(i=0; Kv.sizeO; cout v[i] ;

return 0;

cout

for(i=0; Kv.sizeO; i++) cout v[i] ; cout endl;

удаление единиц

remove cop tegin О О ,vtegin{) ,1) ;

cout Результат: ;

for(i=0; i<v2.siz.e().; i++) cout v2[i] ;. cout endl;



460 Самоучитель (0NN:

После выполнения программы на экране появится следующее:

Исходная ельносгь : 0123456789 Обратная последовательность : 9876543210

4. Одним из наиболее интересных алгоритмов является алгоритм

который модифицирует каждый элемент некоторого диапазона в соответствии с заданной вами функцией. Алгоритм transformO имеет две основные формы:

t oplate<clas3 Inlter, clas ter, class Func>

Outiter transform <Inlter начало, Inlter окончание,

Outlte лы-ат, Fun м *ункция) ;

template<claaa Inltarl, clas rf, class Outlter, class Punc> Outlte terl Hawajiol, Inlterl окончание!,

Inlter2 начало2, Outlter лыгат, Fun м *ункция ) ;

Алгоритм опп() применяет функцию к диапазону элементов и сохраняет результат в месте, определенном итератором результат. В первой форме диапазон задается итераторами начало и окончание, а применяемой функцией является унарная фунщия. Эга функция в качестве параметра получает значение элемента и должна возвратить модифицированный элемент. Во второй

форме модификация осуществляется с помощью бинарной оператор-функции бинарная фуикция. которая в качестве первого параметра получает

значение элемента из предназначенной для модификации последовательности, а в качестве второго параметра - элемент из второй последовательности. Обе версии возвращают итератор конца итоговой последовательности.

В следующей программе для модификации используется функция xfonn(), которая возводит в квадрат элементы списка. Обратите внимание, что итоговая последовательность хранится в том же списке, что и исходная последовательность.

Пример зования алгоритма transform #include <iostream> tinclude <list> ftinclude <algorithni>

using namespace std; , , .. .

Простая функция модификации . *

int xformdnt i) {

return i * i; квадрат исходного значения

int main () . ;

{ -

list<int> xl;

int i; .



cout Исходное содержимое списка xl: list<int>: : iterator p = xl. begin () ; while (p f= xl.endO) {

cout *p , . .. . .

P++;

) ,.

cout endl;

1

модификация элементов списка xl * -.

p = transform (xl. begin {) , xl. end () , xl. begin () , xf orm) ;

cou< Модифицированное содержимое списка xl: p = xl. begin () ;

while (p !=xl.end()) { - -

cou< *p ; . .

} . .

- . . - \

return 0; -гл: ; . \-. \ ;ifi..j После выполнения программы на экране появится следующее: .

Исходное содержое списка х1: 0 1 2 3 4 5 6 7 8 9

Модифицированное содержое списка xl: О 1 4 9 16 25 36 49 64 8l-- .

Как видите, возведен в кваат каждый элемент списка xl. i ,

Алгоритм имеет следующие основн1е формы!: .

tenlate<class Randlter>

void 9ort(BandIter начало, Randlter окончатгв); te4plate<olass Randlter, class Сощ>> -

voi ter начало, Randlter окончавка,

Comp фулкчия срагнвш(я);

Алгоритм сортирует элементы диапазона, заданного итераторами начало и окончание. Во второй форме имеется возможность задать функцию сравнения, которая определяет, является ли один элемент меньше, чем другой. Напишите программу, демонстрирующую работу алгоритма sort(). (Выберите ту его форму, которая вам больше нравится.)

11 размещение значений в списке .

for (1=0; i<lO; i-b+) xl .push back(i) ; / л -.,



1 ... 148 149 150 [ 151 ] 152 153 154 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика