Использование функций min и max в C ++ - PullRequest
63 голосов
/ 27 октября 2009

Из C ++, min и max предпочтительнее, чем fmin и fmax? Для сравнения двух целых чисел, они обеспечивают в основном ту же самую функциональность?

Вы склонны использовать один из этих наборов функций или предпочитаете писать свои собственные (возможно, для повышения эффективности, мобильности, гибкости и т. Д.)?

Примечания:

  1. Стандартная библиотека шаблонов C ++ (STL) объявляет функции min и max в стандартном заголовке C ++ алгоритма .

  2. Стандарт C (C99) обеспечивает функции fmin и fmax в стандартном заголовке C math.h .

Заранее спасибо!

Ответы [ 14 ]

1 голос
/ 27 октября 2009

Используйте std::min и std::max.

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

template <typename T>
T min (T, T) {
  // ... default
}

inline float min (float f1, float f2) {
 return fmin( f1, f2);
}    
1 голос
/ 27 октября 2009

fmin и fmax только для переменных с плавающей запятой и двойных.

min и max - это шаблонные функции, которые позволяют сравнивать любые типы по двоичному предикату. Их также можно использовать с другими алгоритмами для обеспечения сложной функциональности.

0 голосов
/ 27 октября 2009

fmin и fmax, из fminl и fmaxl могут быть предпочтительнее при сравнении целых чисел со знаком и без знака - вы можете воспользоваться тем, что весь диапазон чисел со знаком и без знака и вы не надо беспокоиться о целочисленных диапазонах и акциях.

unsigned int x = 4000000000;
int y = -1;

int z = min(x, y);
z = (int)fmin(x, y);
0 голосов
/ 27 октября 2009

Я всегда использую макросы min и max для целых. Я не уверен, почему кто-то использовал бы fmin или fmax для целочисленных значений.

Большой недостаток с min и max в том, что они не являются функциями, даже если они похожи на них. Если вы делаете что-то вроде:

min (10, BigExpensiveFunctionCall())

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

...