|
Программирование >> Операторы преобразования типа
О Алгоритм 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
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |