Программирование >>  Инициализация объектов класса, структура 

1 ... 358 359 360 [ 361 ] 362 363 364 ... 395


template < class Inputlterator, class Outputlterator > Outputlterator adjacent difference(

InputIterator first, InputIterator last,

OutputIterator result );

template < class InputIterator, class OutputIterator >

class BinaryOperation > OutputIterator adjacent difference(

InputIterator first, InputIterator last,

Алгоритм adjacent difference()

OutputIterator result, BinaryOperation op );

Первый вариант adjacent difference() создает новую последовательность, в которой значение каждого элемента, кроме первого, равно разности между текущим и предыдущим элементами исходной последовательности. Например, если дано {0,1,1,2,3,5,8}, то перв1м элементом новой последовательности будет копия: 0. Вторым - разность первых двух элементов исходной последовательности: 1. Третий элемент равен разности третьего и второго элементов: 1-1=0, и т.д. В результате мы получим последовательность {0,1,0,1,1,2,3}.

Во втором варианте разность соседних элементов вычисляется с помощью указанной бинарной операции. Возьмем ту же исходную последовательность и передадим объект-функцию times<int>. Как и раньше, первый элемент просто копируется. Второй элемент - это произведение первого и второго элементов исходной последовательности; он тоже равен 0. Третий элемент - произведение второго и третьего элементов исходной последовательности: 1 * 1 = 1, и т.д. Результат - {0,1,2,6,15,40}.

В обоих вариантах итератор OutputIterator указывает на элемент, расположенный за последним элементом новой последовательности. adjacent difference() - это один из численных алгоритмов, для его использования в программу необходимо включить заголовочный файл <numeric>.



#include <numeric>

#include <list>

#include <functional> #include <iterator> #include <iostream.h>

int main()

int ia[] = { 1, 1, 2, 3, 5, 8 };

list<int,allocator> ilist(ia, ia+6); list<int,allocator> ilist result(ilist.size());

adjacent difference(ilist.begin(), ilist.end(), ilist result.begin() );

на в1ходе печатается:

1 0 1 1 2 3

copy( ilist result.begin(), ilist result.end(),

ostream iterator<int>(cout, )); cout << endl;

adjacent difference(ilist.begin(), ilist.end(),

ilist result.begin(), times<int>() );

на в1ходе печатается:

1 1 2 6 15 40

copy( ilist result.begin(), ilist result.end(), ostream iterator<int>(cout, )); cout << endl;

template < class ForwardIterator > ForwardIterator

adjacent find( ForwardIterator first, ForwardIterator last );

template < class ForwardIterator, class BinaryPredicate > ForwardIterator

adjacent find( ForwardIterator first,

Алгоритм adjacent find()

ForwardIterator last, Predicate pred );

adjacent find() ищет первую пару одинаковых соседних элементов в диапазоне, ограниченном итераторами [first,last) . Если соседние дубликаты найдены, то алгоритм возвращает однонаправленный итератор, указывающий на первый элемент пары, в противном случае возвращается last. Например, если дана последовательность {0,1,1,2,2,4}, то будет найдена пара [1,1] и возвращен итератор, указывающий на первую единицу.



#include <algorithm>

#include <vector>

#include <iostream.h>

#include <assert.h>

class TwiceOver { public:

bool operator() ( int val1, int val2 )

{ return val1 == val2/2 ? true : false; }

int main()

vector< int, allocator > vec( ia, ia+4 );

int *piter;

vector< int, allocator >::iterator iter;

int ia[] = { 1, 4, 4, 8 };

piter указает на ia[1] find( ia,

ia[ 1 ] );

piter = adjacent find( ia, ia+4 ); assert( *piter == ia[ 1 ] );

iter указает на vec [2]

iter = adjacent find( vec.begin(), vec.end(), TwiceOver() ); assert( *iter == vec[ 2 ] );

/ / пр сюда: все хорошо

cout << ok: adjacent-find() завершился успешно!\n ; return 0;

template < class ForwardIterator, class Type >

bool

binary search( ForwardIterator first,

Forwardlterator last, const Type &value );

template < class ForwardIterator, class Type >

bool

binary search( ForwardIterator first,

Forwardlterator last, const Type &value,

Алгоритм binary search()

Compare comp );

binary search() ищет значение value в отсортированной последовательности, ограниченной парой итераторов [first,last) . Если это значение найдено, возвращается true, иначе - false. В первом варианте предполагается, что контейнер отсортирован с помощью оператора меньше . Во втором варианте порядок определяется указанным объектом-функцией.



1 ... 358 359 360 [ 361 ] 362 363 364 ... 395

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