Программирование >>  Операторы преобразования типа 

1 ... 114 115 116 [ 117 ] 118 119 120 ... 239


О Алгоритм generateO присваивает значения, сгеперироваиные вызовом ор() для каждого элемента в интервале [beg,end).

О Алгоритм generate n() присваивает значения, сгенерированные вызовом ор{) для первых пит элементов в интервале \beg,...).

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

О Сложность линейная {numberOfElements или пит вызовов ор{) и присваиваний).

В следующей программе алгоритмы generate() и generate n() используются для вставки и присваивания случайных значений:

algo/generate.cpp #1nclude <cstdllb> #include algostuff-hpp using namespace std:

int rrainO (

11st<int> coll;

Получение пяти случайных чисел

generate n (bdck 1nserter(coll), Начало приемного интервала 5. Счетчик

rand): Генератор значений

PRiNTJLEMENTSCcoll);

Замена пятью новыми случайными числами generate (coll,beginO. coll.endO. Приемный интервал rand): Генератор значений

PRINTJLEMENTS(coll):

Функция rand() упоминается на с. 557. Примерный результат выполнения программы выглядит так:

41 18647 6334 26500 19169 15724 11478 29358 26962 24464

Результат зависит от платформы, так как последовательность случайных чисел, сгенерированная функцией rand(), не стандартизирована.

Пример использования алгоритма generate() с объектами функций для построения числовой последовательности приведен на с, 298.

Замена элементов Замена внутри интервала

void

replace (Forwardlterator beg. Forwardlterator end, const T& oldValue, const T& newValue)



void

replace if (Forwardlterator beg. Forwardlterator end. UnaryPredicate op. const T& newValue)

О Алгоритм гер1асе() заменяет все элементы интервала [beg,end), равные oldValue, значением newValue.

О Алгоритм replace if() заменяет все элементы интервала [beg,end), для которых унарный предикат ор(е1етп) возвращает true, значением newValue.

О Предикат ор не должен изменять свое состояние во время вызова. За подробностями обращайтесь на с. 303.

О Сложность линейная (numberOfElements сравнений или вызовов ор соответственно).

Пример использования алгоритмов гер1асе() и replace if().

algo/replacel.cpp include algostuff,hpp using namespace std;

lnt mainO

llst<lnt> coll:

INSERT ELEMENTS(coll.2.7) INSERT ELEMENTS(coll.4.9) PRINT ELEMENTS(coll. coll

Замена всех элементов, равных 6. значением 42 replace (coll.beginO. coll.endO. Интервал

6. Старое значение

42): Новое значение

PRINT ELEMENTS(coll. Coll: );

Замена всех элементов, меньших 5. значением О replace if (coll.beginO. coll.endO. Интервал

bind2nd(less<1nt>0.5). Критерий замены 0): Новое значение

PRINT ELEMENTS(coll. coll; ):

Результат выполнения программы выглядит так:

coll coll coll

234567456789 2 3 4 5 42 7 4 5 42 7 8 9 О О О 5 42 7 О 5 42 7 8 9

Замена при копировании

Outputlterator

гер1асе сору (Inputlterator sourceBeg. Inputlterator sourceEnd. Outputlterator destBeg. const T& oldValue, const T& newValue)



Outputlterator

rGplace copy if (Inputlterator sourceBeg. Inputlterator sourceEnd. Outputlterator destBeg. UnaryPredicate op. const T& newValue)

О Алгоритм replace copy() является объединением алгоритмов сору() и гер1асе(). Он заменяет каждый элемент интервала [beg,end), равный oldValue, значением newValue в процессе копирования элементов в приемный интервал, начинающийся с позиции destBeg.

О Алгоритм гер1асе соруЛ() является объединением алгоритмов сору() и replace. if(). Он заменяет каждый элемент интервала [beg,end), для которого унарный предикат opieleni) возвращает true, значением newValue. Замена производится в процессе копирования элементов в приемный интервал, начинающийся с позиции destBeg.

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

О Предикат ор не должен изменять свое состояние во время вызова. За подробностями обращайтесь на с. 303.

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

О Сложность линейная {numberOfElements сравнений или вызовов ор и присваиваний соответственно).

Пример использования алгоритмов гер1асе сору() и replace copy if():

algo/replace2.cpp #include algostuff.hpp using namespace std:

int niainO (

list<int> coll:

INSERTJLEMENTS(co11.2.6): INSERT ELEMENTS(coll.4.9); PRINT ELEMENTS(coll):

Вывод коллекции, в которой все элементы, равные 5. заменены значением 55

гер1асе сору(со11 .begin(). coll.endO. Источник

ostream 1terator<int>(cout. ). Приемник 5. Старое значение

55): Новое значение

cout endl:

Вывод коллекции, в которой все элементы, меньшие 5, заменены значением 42



1 ... 114 115 116 [ 117 ] 118 119 120 ... 239

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