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

1 ... 373 374 375 [ 376 ] 377 378 379 ... 395


template < class InputIterator, class RandomAccessIterator > RandomAccessIterator

partial sort copy( InputIterator first, InputIterator last, RandomAccessIterator result first, RandomAccessIterator result last );

template < class InputIterator, class RandomAccessIterator,

class Compare > RandomAccessIterator

partial sort copy( InputIterator first, InputIterator last, RandomAccessIterator result first, RandomAccessIterator result last,

Алгоритм partial sort copy()

Compare comp );

partial sort copy() ведет себя так же, как partial sort() , только частично упорядоченная последовательность копируется в контейнер, ограниченный диапазоном [result first,result last] (если мы задаем отдельный контейнер для копирования результата, то в нем оказывается упорядоченная последовательность). Например, даны

int ia[] = {29,23,20,22,17,15,26,51,19,12,35,40};

два массива:

int ia2[5] ;

Тогда обращение к partial sort copy(), где в качестве miiddle указан восьмой

partial sort copy( &ia[0], &ia[7], &ia[12],

элемент:

&ia2[0], &ia2[5] );

то вызов partial sort() ,где middle указывает на шестой элемент:

partial sort( &ia[0], &ia[5], &ia[12] );

генерирует последовательность, в которой наименьшие пять (т.е. middle-first) элементов отсортированы:

Г{12,15,17,19,20,29,23,22,26,51,35,40}.

Элементы от miiddle до last-1 не расположены в каком-то определенном порядке, хотя значения каждого из них лежат вне отсортированной последовательности. В первом варианте для сравнения используется оператор меньше , определенный для типа элементов контейнера, а во втором - операция сравнения comp.



#include <algorithm> #include <vector> #include <iostream.h>

* печатается:

исходн вектор: 69 23 80 42 17 15 26 51 19 12 35 8 результат применения partial sort() к вектору: семь элементов

8 12 15 17 19 23 26 80 69 51 42 35

результат пренея partial sort copy() к перв семи элементам вектора в порядке убания

26 23 19 17 15 12 8

int main() {

int ia[] = { 69,23, 80, 42, 17, 15,26,51, 19, 12,35, 8 };

vector< int,allocator > vec( ia, ia+12 ); ostream iterator<int> out( cout, );

cout << исходн вектор: ;

copy( vec.begin(), vec.end(), out ); cout << endl;

cout << результат применения partial sort() к вектору:

<< семь элементов \n ; partial sort( vec.begin(), vec.begin()+7, vec.end() ); copy( vec.begin(), vec.end(), out ); cout << endl;

vector< int, allocator > res(7); cout << результат пренения partial sort copy() к перв семи

\n\t

<< элементам вектора в порядке убания \n ;

partial sort copy( vec.begin(), vec.begin()+7, res.begin(),

res.end(), greater<int>() ); copy( res.begin(), res.end(), out ); cout << endl;

Оставшиеся два элемента отсортированы не будут.

template < class InputIterator, class OutputIterator >

OutputIterator

partial sum(

InputIterator first, InputIterator last,

OutputIterator result );

template < class InputIterator, class OutputIterator,

class BinaryOperation > OutputIterator partial sum(

InputIterator first, InputIterator last,

Алгоритм partial sum()

заполняет массив ia2 пятью отсортированными элементами: {12,15,17,19,20}.



#include <numeric> #include <vector> #include <iostream.h>

* печатается:

элементы: 1 3 4 5 7 8 9 частичная сумма элементов:

1 4 8 13 20 28 37

частичная сумма элементов с использованием times<int>(): 1 3 12 60 420 3360 30240

int main()

const int ia size = 7;

int ia[ ia size ] = { 1, 3, 4, 5, 7, 8, 9 };

int ia res[ ia size ];

ostream iterator< int > outfile( cout,

vector< int, allocator > vec( ia, ia+ia size vector< int, allocator > vec res( vec.size()

cout << элементы: ;

copy( ia, ia+ia size, outfile ); cout << endl;

cout << частичная сумма элементов:\n ; partial sum( ia, ia+ia size, ia res ); copy( ia res, ia res+ia size, outfile ); cout << endl;

cout << частичная сумма элементов с использованием times<int>():\n ;

partial sum( vec.begin(), vec.end(), vec res.begin(), times<int>() );

copy( vec res.begin(), vec res.end(), outfile ); cout << endl;

необходимо включить в программу стандартный заголовочный файл <numeric>.

OutputIterator result, BinaryOperation op );

Первый вариант partial sum() создает из последовательности, ограниченной диапазоном [first,last) , новую последовательность, в которой значение каждого элемента равно сумме всех предыдущих, включая и данный. Так, из последовательности {0,1,1,2,3,5,8} будет создана {0,1,2,4,7,12,20}, где, например, четвертый элемент равен сумме трех предыдущих (0,1,1) и его самого (2), что дает значение 4.

Во втором варианте вместо оператора сложения используется бинарная операция, заданная программистом. Предположим, мы задали последовательность {1,2,3,4} и объект-функцию times<int>. Результатом будет {1,2,6,24}. В обоих случаях итератор записи OutputIterator указывает на элемент за последним элементом новой последовательности.

partial sum() - это один из численн1х алгоритмов. Для его использования



1 ... 373 374 375 [ 376 ] 377 378 379 ... 395

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