Шаг 319.
Библиотека STL. Алгоритмы STL. Алгоритмы упорядоченных интервалов. Пример использования алгоритмов слияния

    На этом шаге мы приведем пример использования алгоритмов слияния.

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

//---------------------------------------------------------------------------

#include <vcl.h>
#include <iterator>
#include "algostuff.hpp"

#include <conio.h> //необходимо для getch()

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

std::string ToRus(const std::string &in)
{
  char *buff = new char [in.length()+1];
  CharToOem(in.c_str(),buff);
  std::string out(buff);
  delete [] buff;
  return out;
}

int main()
{
  int c1[] = { 1, 2, 2, 4, 6, 7, 7, 9 };
  int num1 = sizeof(c1) / sizeof(int);

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

  // Вывод исходных интервалов
  cout << ToRus("Интервал c1:\n");
  copy (c1, c1+num1,
        ostream_iterator<int>(cout," "));
  cout << endl;
  cout << ToRus("Интервал c2:\n");
  copy (c2, c2+num2,
        ostream_iterator<int>(cout," "));
  cout << '\n' << endl;

  // Суммирование интервалов алгоритмом merge()
  cout << ToRus("Суммирование интервалов алгоритмом merge():\n");
  merge (c1, c1+num1,
         c2, c2+num2,
         ostream_iterator<int>(cout," "));
  cout << endl;

    // Объединение интервалов алгоритмом set_union()
  cout << ToRus("Объединение интервалов алгоритмом set_union():\n");
  cout << "set_union():                ";
  set_union (c1, c1+num1,
             c2, c2+num2,
             ostream_iterator<int>(cout," "));
  cout << endl;

  // Пересечение интервалов алгоритмом set_intersection()
  cout << ToRus("Пересечение интервалов алгоритмом set_intersection():\n");
  set_intersection (c1, c1+num1,
                    c2, c2+num2,
                    ostream_iterator<int>(cout," "));
  cout << endl;

  // Определение элементов первого интервала,
  // не входящих во второй интервал, алгоритмом set_difference()
  cout << ToRus("Определение элементов первого интервала,\n");
  cout << ToRus("не входящих во второй интервал, алгоритмом set_difference():\n");
  set_difference (c1, c1+num1,
                  c2, c2+num2,
                  ostream_iterator<int>(cout," "));
  cout << endl;

  // Вычисление разности интервалов алгоритмом set_symmetric_difference()
  cout << ToRus("Вычисление разности интервалов алгоритмом\n
                  set_symmetric_difference():\n");
  set_symmetric_difference (c1, c1+num1,
                            c2, c2+num2,
                            ostream_iterator<int>(cout," "));
  cout << endl;


  getch();
  return 0;
}

//---------------------------------------------------------------------------
Текст этого примера можно взять здесь.

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


Рис.1. Результат работы приложения

    На следующем шаге мы рассмотрим слияние смежных упорядоченных интервалов.




Предыдущий шаг Содержание Следующий шаг