Шаг 269.
Библиотека STL.
Алгоритмы STL. Немодифицирующие алгоритмы. Минимум и максимум

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

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

  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. Результат работы приложения

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

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




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