С++ функция std_max

C++ Программирование и разработка

std в C++ означает стандарт, ссылаясь на стандартную библиотеку и стандартное пространство имен. В стандартной библиотеке есть подбиблиотека под названием алгоритм. В библиотеке алгоритмов есть функция max() в перегруженной форме. Функция max возвращает максимум двух значений одного типа или максимальное значение в списке (однотипных значений).

Чтобы использовать функцию max() библиотеки алгоритмов C++, программа должна начинаться с чего-то с включенной библиотекой алгоритмов, например:

#include <iostream>

#include <algorithm>

using namespace std ;

Существует четыре основных перегруженных формы этой функции max, и в этой статье объясняется, как их использовать.

template < class T > constexpr const T & max const T & a const T & b )

Эта функция принимает два аргумента одного типа и возвращает больший из них. Если оба одинаковы по значению, возвращается первое вхождение. Следующая программа иллюстрирует его использование:

#include <iostream>

#include <algorithm>

using namespace std ;

int main )
{
char ch = max ‘E’ ‘C’ ;
cout << ч << endl ;

вернуть ;
}

Выход Е.

template < class T , class Compare >

constexpr const T & max const T & a const T & b , Compare comp )

Эта перегруженная функция аналогична предыдущей, но программист определил свою собственную функцию сравнения. Приведенная выше перегруженная функция использует функцию сравнения по умолчанию. Определение функции сравнения, которая делает то же самое, что и функция сравнения по умолчанию:

    bool compFn(char a, char b) {
if (< b)
return true;
else
return false;
}

Он принимает два значения, которые могут быть списком, затем возвращает true, если первое меньше второго, то false. В этой функции «а» является первым значением, а b — вторым значением. В синтаксисе функции max() в заголовке этого раздела первым аргументом является «a», вторым аргументом является b, а третьим аргументом является имя функции сравнения без круглых скобок и аргументов.

Обратите внимание, что тип аргументов функции сравнения совпадает с типом аргументов функции max().

Следующая программа с функцией, определенной программистом, имеет тот же эффект, что и вышеприведенная программа:

#include <iostream>

#include <algorithm>

using namespace std;

bool compFn(char a, char b) {
if (< b)
return true;
else
return false;
}

int main()
{
char ch = max(‘E’, ‘C’, compFn);
cout<<ch<<endl;

return 0;
}

Результатом является E. Если бы ’C’ было введено перед ’E’ в качестве аргументов в функции max(), вывод все равно был бы ’E’.

template<class T> constexpr T max(initializer_list<T> t)

В C++ initializer_list является литералом массива. Эта перегруженная форма возвращает самое большое значение в списке initializer_list. Следующая программа иллюстрирует это:

#include <iostream>

#include <algorithm>

using namespace std;

int main()
{
char ch = max({‘C’, ‘A’, ‘E’, ‘D’, ‘B’});
cout<<ch<<endl;
return 0;
}

Выход есть, Е.

template<class T, class Compare>

constexpr T max(initializer_list<T> t, Compare comp)

Эта перегруженная функция похожа на приведенный выше код, но ей нужна функция сравнения. Приведенную выше функцию сравнения можно использовать, как показано в следующей программе:

#include <iostream>

#include <algorithm>

using namespace std;

bool compFn(char a, char b) {
if (< b)
return true;
else
return false;
}

int main()
{
char ch = max({‘C’, ‘A’, ‘E’, ‘D’, ‘B’}, compFn);
cout<<ch<<endl;
return 0;
}

Выход есть, Е.

Пользовательская максимальная функция

Программист может написать свою собственную функцию max(). Стратегия состоит в том, чтобы фактически выполнить сравнение в функции.

Максимум двух значений

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

    #include <iostream>
using namespace std;

char max(char a, char b) {
if (> b)
return a;
else
return b;
}

int main()
{
char ch = max(‘E’, ‘C’);
cout<<ch< b)
return a;
else
return b;
}

int main()
{
char ch = max(‘C’, ‘E’);
cout<<ch<<endl;
return 0;
}

Максимум в списке

Также можно написать пользовательскую программу для поиска максимального значения в списке. Стратегия следующая:

Предполагается, что первый элемент является максимальным элементом в списке. Если первый элемент меньше следующего элемента, то следующий элемент становится новым максимумом, иначе первый элемент остается максимальным. Если предполагаемый максимум меньше элемента после, то элемент после становится новым максимумом, иначе остается старый максимум. Это сравнение продолжается до конца списка. Следующая программа иллюстрирует это:

    #include <iostream>
using namespace std;

char max(char arr[], int size) {
char maxVal = arr[0];

for (int i=1; i<size; i++) {
if (maxVal<arr[i])
maxVal = arr[i];
}
return maxVal;
}

int main()
{
char ar[] = {‘C’, ‘A’, ‘E’, ‘D’, ‘B’};
char ch = max(ar, 5);
cout<<ch<<endl;
return 0;
}

Результатом является E. Первый оператор пользовательской функции max получает предполагаемый максимум в виде:

char maxVal = arr[0];

Следующий сегмент кода — это цикл for. Внутри цикла for находится конструкция if, которая выполняет сравнение и присваивание по мере продолжения сканирования массива.

В основной функции C++ первый оператор объявляет массив, максимальный элемент которого требуется. Второй оператор вызывает пользовательскую функцию max. Оператор после выводит максимальное значение в списке.

Заключение

Без написания пользовательской функции max. Чтобы получить максимальное значение из двух значений или из более чем двух значений в списке, используйте соответствующую функцию ниже:

template<class T> constexpr const T& max(const T& a, const T& b)

template<class T, class Compare>

constexpr const T& max(const T& a, const T& b, Compare comp)

template<class T> constexpr T max(initializer_list<T> t)

template<class T, class Compare>

constexpr T max(initializer_list<T> t, Compare comp)

Все эти перегруженные функции находятся в библиотеке алгоритмов.

Читайте также:  Как обрезать пробелы с помощью PHP
Оцените статью
bestprogrammer.ru
Добавить комментарий