1. ホーム
  2. c++

[解決済み] C++におけるmin関数とmax関数の使用

2023-06-10 04:14:52

質問

C++から std::min であり std::max よりも優先される fminfmax ? 2つの整数を比較する場合、これらは基本的に同じ機能を提供するのでしょうか?

これらの関数群のいずれかを使用する傾向がありますか、それとも自分で書くことを好みますか(おそらく効率、移植性、柔軟性などを改善するため)?

メモ

  1. C++標準テンプレートライブラリ(STL)で宣言されている minmax 関数は、標準 C++ の アルゴリズム ヘッダを作成します。

  2. C 規格 (C99) では fminfmax 関数は、標準的な C math.h ヘッダを作成します。

事前にありがとうございます!

どのように解決するのですか?

fmin そして fmax は特に浮動小数点数で使用するためのものです(そのため "f" が付いています)。int 型に使用すると、コンパイラやプラットフォームによっては、変換や関数呼び出しのオーバーヘッドなどにより、パフォーマンスや精度が低下する可能性があります。

std::minstd::max はテンプレート関数(ヘッダ <algorithm> ) で、小文字の型 ( < ) 演算子を持つ任意の型に対して動作するため、このような比較が可能な任意のデータ型に対して動作させることができます。で動作させたくない場合は、独自の比較関数を提供することもできます。 < .

これは、引数の型が異なる場合に明示的に変換して一致させる必要があるため、より安全な方法です。コンパイラは、たとえば64ビットのintを64ビットのfloatに誤って変換することを許しません。この理由だけでも、テンプレートをデフォルトの選択とすべきです。(クレジット:Matthieu M & bk1e)

浮動小数点数で使用される場合でも、テンプレート はパフォーマンスで勝利します。コンパイラは、ソースコードがコンパイル単位の一部であるため、テンプレート関数の呼び出しをインライン化するオプションを常に持っています。時にはそれが 不可能 一方、ライブラリ関数への呼び出しをインライン化することが不可能な場合もあります (共有ライブラリ、リンク時の最適化がない場合など)。