|
Программирование >> Инициализация объектов класса, структура
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. В первом варианте предполагается, что контейнер отсортирован с помощью оператора меньше . Во втором варианте порядок определяется указанным объектом-функцией.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |