|
Программирование >> Разработка устойчивых систем
Inputlterator fincKInputlterator first. Inputlterator last, const EqualityComparable& value): Алгоритм ищет значение value в заданном интервале [firstlast) и возвращает итератор, указывающир! на первое вхождение. Если значение value не найдено, возвращается итератор last. Алгоритм выполняет линейный поиск; иначе говоря, он начинает с начала и последовательно просматривает все элементы, не делая никаких предположений относительно их сортировки. С другой стороны, алгоритм binary search() (см. далее) работает только с сортированными интервалами, но зато гораздо быстрее. Inputlterator find if(Inputlterator first. Inputlterator last. Predicate pred): Алгоритм findjf(), как и find(), выполняет линейный поиск в интервале. Но вместо фиксированного значения он ищет элемент, для которого предикат pred возвращает true. При отсутствии таких элементов возвращается итератор last Forwardlterator adjacent find(Forwardlterator first. Forwardlterator last): Forwardlterator adjacent find(Forwardlterator first. Forwardlterator last. BinaryPredicate binary pred): Как и find(), этот алгоритм выполняет линейный поиск в интервале, но вместо одного фиксированного значения он ищет два эквивалентных соседних элемента. Первая форма ищет два соседних элемента с одинаковыми значениями (сравнение осуществляется оператором ==). Вторая форма ищет два соседних элемента, для которых бинарный предикат binary pred возвращает true. Если искомая пара успешно найдена, алгоритм возвращает итератор для первого из двух элементов; в противном случае возвращается итератор last. Forwardlteratorl find first of(Forwardlteratorl firstl. Forwardlteratorl lastl. ForwardIterator2 first2, ForwardIterator2 last2): Forwardlteratorl find first of(Forwardlteratorl firstl. Forwardlteratorl lastl, ForwardIterator2 first2. ForwardIterator2 last2, BinaryPredicate binary pred): Как и find(), алгоритм find first of() выполняет линейный поиск в интервале. Обе формы ищут в первом интервале элемент, значение которого эквивалентно одному из элементов второго интервала. Первая форма сравнивает элементы при помощи оператора ==, а вторая - при помощи заданного предиката, аргументами которого являются текущий элемент первого интервала и элемент второго интервала. Forwardlteratorl searchCForwardlteratorl firstl. Forwardlteratorl lastl. ForwardIterator2 first2. ForwardIterator2 last2): Forwardlteratorl searchCForwardlteratorl firstl. Forwardlteratorl lastl. ForwardIterator2 first2. ForwardIterator2 last2, BinaryPredicate binary pred): Алгоритм проверяет, входит ли второй интервал в первый интервал (при том же порядке следования элементов), и если входит - возвращает итератор для начальной позиции первого вхождения второго интервала. Если подмножество найти не удается, возвращается lastl. Первая форма сравнивает элементы оператором ==, а вторая форма вызывает для каждой пары сравниваемых объектов предикат binary pred и проверяет, равен ли результат true. Forwarcllteratorl fincl encl(ForwarclIteratorl firstl, Forwarcllteratorl lastl. ForwardIterator2 first2. ForwardIterator2 last2); Forwardlteratorl find end(ForwardIteratorl firstl. Forwardlteratorl lastl. ForwardIterator2 first2. ForwardIterator2 last2, BinaryPredicate binary pred): По своим формам и аргументам этот алгоритм аналогичен search(): он тоже ищет вхождение второго интервала в виде подинтервала первого. Но если search() ищет первое вхождение подинтервала, то find end() находит последнее вхождение и возвращает итератор, установленный на его первый элемент. Forwardlterator search n(ForwardIterator first. Forwardlterator last. Size count, const T& value): Forwardlterator search n(ForwardIterator first. Forwardlterator last. Size count, const T& value. BinaryPredicate binary pred): Алгоритм ищет в интервале [firstlast) группу из count последовательных элементов, равных value (первая форма) или возвращающих true при передаче предикату binary pred вместе с value (вторая форма). Если найти такую группу не удается, алгоритм возвращает last. Forwardlterator min element(Forwardlterator first. Forwardlterator last): Forwardlterator min element(ForwardIterator first. Forwardlterator last. BinaryPredicate binary pred): Алгоритм возвращает итератор, указывающий на первое вхождение наименьшего значения в интервале (как объясняется далее, таких вхождений может быть несколько). При неудачном поиске возвращается last. Первая версия выполняет сравнения оператором < и возвращает значение г, при котором условие *е<*г ложно для каждого элемента е в интервале [first/). Вторая версия использует для сравнения бинарный предикат и возвращает значение г, при котором функция binary pred(*e,*r) возвращает false для каждого элемента е в интервале [firstr). Forwardlterator max element(Forwardlterator first, Forwardlterator last): Forwardlterator max element(ForwardIterator first. Forwardlterator last. BinaryPredicate binary pred): Алгоритм возвращает итератор, указывающий на первое вхождение наибольшего значения в интервале (таких вхождений может быть несколько). При неудачном поиске возвращается last. Первая версия выполняет сравнения оператором < и возвращает значение г, при котором условие *г<*е ложно для каждого элемента е в интервале [firstr). Вторая версия использует для сравнения бинарный предикат и возвращает значение г, при котором функция binary pred(*r,*e) возвращает false для каждого элемента е в интервале [firstr). void replасе(Forwardlterator first. Forwardlterator last. const T& old value, const T& new value); void replace if(Forwardlterator first. Forwardlterator last. Predicate pred. const T& new value): Outputlterator replace copy(InputIterator first. Inputlterator last. Outputlterator result, const T& old value. const T& new value): Outputlterator replace copy if(Inputlterator first. Inputlterator last. Outputlterator result, Predicate pred, const T& new value): Все разновидности гер1асе() перебирают интервал [firstlast) в поиске значений, удовлетворяющих заданному критерию, и заменяют их значением new value. Алгоритмы гер1асе() и гер1асе сору() просто ищут фиксированное значение old value; алгоритмы replacejf() и replace copyJf() ищут значения, удовлетворяющие предикату pred. Версии с суффиксом сору не изменяют исходный интервал, а создают модифицированную копию в result (после каждого присваивания result инкрементируется). Для удобства просмотра результатов в данном примере используются векторы с элементами типа int Продемонстрированы не все версии каждого алгоритма (наиболее очевидные опущены). : C06:SearchReplace.cpp Алгоритмы поиска и замены в STL #include <algorithm> #1 nclude <functional> #1 nclude <vector> #include PrintSequence.h using namespace std: struct PlusOne { bool operatorO(int i. int j) { return j == i + 1: } class MulMoreThan { int value: public: MulMoreThan(int val) : value(val) {} bool operatorO(int v. int m) { return v * m > value: } int mainO { int a[] ={1.2. 3. 4. 5. 6. 6, 7. 7. 7. 8. 8. 8. 8. 11. 11. 11. 11. 11 }: const int ASZ = sizeof a / sizeof *a: vector<int> v(a. a + ASZ): print(v.beginO, v.endO. v . ): vector<int>::iterator it = find(v.beginO. v.endO, 4): cout find: *it endl: it = find if(v.begin(). v.endO, bind2nd(greater<int>(). 8)): cout findjf: *it endl: it = adjacent find(v.begin(). v.endO): while(it != v.endO) { cout adjacent find: *it i , *(it + 1) endl: / it = adjacent find(it + 1, v.endO): it = adjacent find(v.beginO, v.endO, PlusOneO): while(it != v.endO) { cout adjacent find PlusOne: *it *(it + 1) endl; it = adjacent find(it + 1, v.endO. PlusOneO): int b[] = { 8. 11 }: const int BSZ = sizeof b / sizeof *b: print(b. b + BSZ. b . ): it = find first of(v.beginO, v.endO, b, b + BSZ):
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |