Программирование >>  Операторы преобразования типа 

1 ... 128 129 130 [ 131 ] 132 133 134 ... 239


О Приемный интервал может содержать дубликаты, если соответствующий элемент дублируется в первом исходном интервале. Количество элементов с одинаковыми значениями в приемном интервале равно разности между их количествами в первом и втором исходном интервалах. Если второй интервал содержит больше дубликатов, то количество дубликатов в приемном интервале равно нулю.

О Обе формы возвращают позицию за последним скопированным элементом в приемном интервале.

О В необязате.п:ьном параметре ор передается бинарный предикат, определяющий критерий сортировки: op{elem1 ,е1еш2).

О Алгоритмы не изменяют состояние исходных интервалов.

О Перед вызовом интервалы должны быть упорядочены по соответствующему критерию сортировки.

О Перед вызовом необходимо убедиться в том, что приемный интервал имеет достаточный размер, или использовать итераторы вставки.

О Приемный интервал не должен перекрываться с исходными интервалами.

О Сложность линейная (не более 2x(numberOfElements1+numberOfElements2yi сравнений).

Пример использования алгоритма setL.difference() приведен на с. 411. В этом примере также продемонстрированы отличия алгоритма set difference() от других алгоритмов, комбинирующих элементы двух упорядоченных интервалов.

Outputlterator

set syrnmetric clifference (Inputlterator sourcelBeg,

Inputlterator sourcelEnd. Inputlterator source2Beg,

Inputlterator source2End, Outputlterator destBeg)

set syrnmetric difference (Inputlterator sourcelBeg.

Inputlterator sourcelEnd. Inputlterator source2Beg.

Inputlterator source2End. Outputlterator destBeg, BinaryPredicate op)

О Обе формы комбинируют элементы упорядоченных исходных интервалов source 1Beg,source1 End) и [source2Beg,source2End) таким образом, что приемный интервал [destBeg,...) содержит все элементы, присутствующие либо в первом, либо во втором интервале (но ие в обоих сразу). Например, рассмотрим два интервала:

1 2 2 4 6 7 7 9 22236689

В результате вызова алгоритма set symmetric difference() для этих интервалов будет получен следующий интервал:

1 2 3 4 6 7 7 8



О В приемном интервале элементы следуют в порядке сортировки.

О Приемный интервал может содержать дубликаты, если соответствующий элемент дублируется в первом исходном интервале. Ко.п:ичество элементов с одинаковыми значениями в приемном интервале равно разности между их количествами в исходных интервалах.

О Обе формы возвращают позицию за последним скопированным элементом в приемном интервале.

О В необязательном параметре ор передается бинарный предикат, определяющий критерий сортировки: op(elem1 ,elem2),

О Алгоритмы не изменяют состояние исходных интервалов.

О Перед вызовом интервалы должны быть упорядочены по соответствующему критерию сортировки.

О Перед вызовом необходимо убедиться в том, что приемный интервал имеет достаточный размер, или использовать итераторы вставки.

О Приемный интервал не должен перекрываться с исходными интервалами.

О Сложность линейная (не более 2x(numberOfElements1+numberOfElements2)-[ сравнений).

Пример использования алгоритма set difference() приведен далее. В этом примере также продемонстрированы отличия алгоритма set difference() от других алгоритмов, комбинирующих элементы двух упорядоченных интервалов.

Пример использования алгоритмов слияния

в следующем примере сравниваются алгоритмы, комбинирующие элементы двух упорядоченных исходных интервалов, демонстрируются принципы их работы и различия между ними:

algo/sGtalgos.cpp #lnclude algostuff.hpp using namespace std;

int mainO {

int cl[] = { 1. 2. 2. 4. 6. 7. 7. 9 }: int numl = sizeof(cl) / sizeofCint);

int c2[] = { 2. 2. 2. 3, 6. 6. 8. 9 }; int num2 = sizeof(c2) / sizeofCint);

Вывод исходных интервалов

cout cl: ;

copy Ccl, cl+numl.

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

cout C2; ;

copy (c2, c2+num2,

ostream iterator<int>(cout, )):



cout \n endl;

Суммирование интервалов апгоритмом mergeO cout mergeO: :

merge (cl. cl+numl. cl, c2+nuin2.

ostreamjterator<1nt>(cout. )); cout endl;

Объединение интервалов алгоритмом set union() cout set un1on(); :

set union (cl, cl+numl, c2, c2+num2,

ostream iterator<1nt>(cout. )); cout endl;

Пересечение интервалов алгоритмом set 1ntersect1on() cout setJntersectionO: setjntersection (cl, cl+numl.

c2. c2+num2,

ostreamjterator<int>(cout. ));

cout endl:

Определение злементов первого интервала, не входящих во второй интервап. алгоритмом setJifferenceO cout setJifferenceO: ;

set difference (cl, cl+numl, c2. c2+num2,

ostreamjterator<int>(cout, ));

cout endl;

Вычисление разности интервалов алгоритмом set symmetricJ1fference() cout set symmetricJ1fference(): : set symmetric difference (cl. cl+numl.

c2, c2+num2.

ostreamjterator<1nt>(cout. )):

cout endl:

Результат выполнения программы выглядит так;

cl: 12 2 4 6 7 7 9

с2: 2 2 2 3 6 6 8 9

mergeO; 1222223466677899

set union(): 122234557789

setJntersectionO; 2 2 6 9

setjifference(): 14 7 7

setjymmetric difference(); 12346778



1 ... 128 129 130 [ 131 ] 132 133 134 ... 239

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