|
Программирование >> Операторы преобразования типа
print all elements with a value less than 5 replaced with 42 replace copy if(coll .beginO . coll.endO. Источник ostrearn 1terator<int>(cout. ). Приемник bind2nd(less<1nt>().5), Критерий замены 42); Но8ое значение cout endl; Вывод коллекции, в которой все нечетные элементы заменены нулями replace copy if(coll .beginO . coll.endO. Источник ostream 1terator<int>(cout. ). Приемник b1nd2nd(modulus<int>0.2), Критерий замены 0); Новое значение cout endl; Результат выполнения программы выглядит так: 23456456789 2 3 4 55 6 4 55 б 7 8 9 42 42 42 5 6 42 5 6 7 8 9 20406406080 лгоритмы удаления Следующие алгоритмы удаляют элементы из интервала по задщпюму значению или критерию. Однако следует помнить, что эти алгоритмы пе могут изменить количество элементов. Они всего лишь заменяют удаленные элементы следующими элементами, которые не были удалены, и возвращают новый логический конец интервала (позицию за последним элементом, который не был удален). За подробностями обращайтесь на с. 122. /даление элементов с заданным значением Удаление элементов в интервале Forwardlterator remove (Forwardlterator beg, Forwardlterator end. const T& value) Forwardlterator remove if (Forwardlterator beg. Forwardlterator end. UnaryPredicate op) О Алгоритм removeO удаляет в интервале [beg,end) все элементы, значение которых равно value. О Алгоритм remove if() удаляет в интервале [beg,end) все элементы, для которых унарный предикат ор{е1ет) возвращает true. О Оба алгоритма возвращают новый логический конец модифицированного интервала (то есть позицию за последним элементом, который не был удален). О Алгоритмы заменяют удаленные элементы следующими элементами, которые не были удалены. О Алгоритмы сохраняют порядок следования элементов, которые не были удалены. О Вызывающая сторона должна использовать новый логический конец интервала вместо исходного конца end (за дополнительной информацией обращайтесь на с, 122). О Предикат ор не должен изменять свое состояние во время вызова. За подробностями обращайтесь на с. 303. О Алгоритм remove if() обычно копирует унарный предикат внутри алгоритма и использует его дважды. Из-за этого могут возникнуть проблемы, если предикат изменяет свое состояние при вызове функции. За подробностями обращайтесь на с. 303. О Вследствие модификации эти алгоритмы не могут использоваться с ассоциативными контейнерами (см. с, 125), однако в классах ассоциативных контейнеров определена аналогичная функция erase() (см. с. 248). О Для списков определена аналогичная функция remove(), которая часто работает более эффективно, поскольку она меняет внутренние указатели вместо присваивания значений элементам (см. с. 247). О Сложность линейная {numberOfElements сравнений или вызовов ор соответственно). Пример использования алгоритмов remove() и removeJf(): algo/removel.cpp #inclLide algostuff.hpp using namespace std; int mainO ( vector<int> coll: INSERT ELEMENTS(coll.2.6) lNSERT ELEMENTS(coll.4.9) INSERT ELEMENTS(C0ll.l.7) PRiNTJLEMENTSCcoll, coll: ); Удаление всех элементов со значением 5 vector<int>::iterator pos; pos = removeCcoll .beginO . coll.endO. Интервал 5): Удаляемое значение PRiNTJLEMENTSCcoll . size not changed: ); Стирание удаленных элементов из контейнера coll .eraseCpos. coll.endO): PRINTJLEMENTSCcoll/size changed: ); Удаление всех элементов со значением меньше 4 coll ,erase(remove 1f(coll,beginO. coll.endO, Интервал blnd2nd(less<1nt>().4)). Критерий удаления coll .endO): PRINT ELEMENTSCcoll, <4 removed; ); Результат выполнения программы выглядит так: coll: 234564567891234567 size not changed: 234646789123467567 size changed: 234646789123467 <4 removed: 4646789467 Удаление элементов при копировании Outputlterator removG copy (Inputlterator sourceBeg. Inputlterator sourceEnd. Outputlteratir destBeg. const T& value) Outputlterator remove copy 1f (Inputlterator sourceBeg. Inputlterator sourceEnd. Outputlterator destBeg. UnaryPredicate op) О Алгоритм remove copy() является объединением алгоритмов сору() и remove(). Он удаляет из исходного интервала lbeg,end) все элементы, равные value, в процессе копирования элементов в приемный интервал, начинающийся с позиции destBeg. О Алгоритм remove copy if() является объединением алгоритмов сору() и remove if(). Он удаляет каждый элемент интервала [beg,end), для которого унарный предикат op(elem) возвращает true. Замена производится в процессе копирования элементов в приемный интервал, начинающийся с позиции destBeg. О Оба алгоритма возвращают позицию за последним скопированным элементом в приемном интервале (то есть позицию первого элемента, который не был заменен). О Предикат ор не должен изменять свое состояние во время вызова. За подробностями обращайтесь на с. 303. О Перед вызовом необходимо убедиться в том, что приемный интервал имеет достаточный размер, или использовать итераторы вставки. О Сложность линейная (numberOfElements сравнений или вызовов ор и присваиваний соответственно).
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |