Программирование >>  Разработка устойчивых систем 

1 ... 88 89 90 [ 91 ] 92 93 94 ... 196


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):



1 ... 88 89 90 [ 91 ] 92 93 94 ... 196

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