Немодифицирующие алгоритмы. Минимум и максимум

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

   
Приведем общий вид алгоритмов, осуществляющих поиск минимума и максимума, и дадим их краткую характеристику.

  InputIterator
  min_element (InputIterator beg, InputIterator end)
  InputIterator
  min_element (InputIterator beg, InputIterator end, CompFunc op)
  InputIterator
  max_element (InputIterator beg, InputIterator end)
  InputIterator
  max_element (InputIterator beg, Inputlterator end, CompFunc op)

   
Все версии алгоритмов возвращают позицию минимального или максимального элемент в интервале [beg,end).

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

   
Операция ор определяет критерий сравнения двух элементов: op(elem1,elem2). Если первый элемент меньше второго,
операция должна возвращать true.

   
Если в заданном интервале существует несколько элементов с минимальными или максимальными значениями, алгоритмы возвращают
первый найденный элемент.

   
Предикат ор не должен изменять передаваемые аргументы.

   
Сложность линейная (numberOfElements-1 сравнений или вызовов ор соответственно).

   
Следующая программа выводит минимальный и максимальный элементы coll, а также элементы с минимальным и
максимальным абсолютным значением (модулем):

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

#include <vcl.h>
#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;
}

bool absLess (int elem1, int elem2)
{
    return abs(elem1) < abs(elem2);
}

int main()
{
  deque<int> coll;

  INSERT_ELEMENTS(coll,2,8);
  INSERT_ELEMENTS(coll,-3,5);

  PRINT_ELEMENTS(coll,"Исходный дек:\n");

    // Вычисление и вывод минимума и максимума
    cout << ToRus("Минимум:  ")
         << *min_element(coll.begin(),coll.end())
         << endl;
    cout << ToRus("Максимум: ")
         << *max_element(coll.begin(),coll.end())
         << endl;

    // Вычисление и вывод минимума и максимума
    // по абсолютным значениям
    cout << ToRus("Абсолютное значение минимума:  ")
         << *min_element(coll.begin(),coll.end(),
                         absLess)
         << endl;
    cout << ToRus("Абсолютное значение максимума: ")
         << *max_element(coll.begin(),coll.end(),
                         absLess)
         << endl;


  getch();
  return 0;
}

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

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

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


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

   
Обратите внимание: алгоритмы возвращают позицию минимального/максимального элемента, а не значение,
поэтому при выводе используется унарный оператор *.

   
Со следующего шага мы начнем рассматривать алгоритмы поиска элементов.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий