2012-03-11 27 views
7

私は頻繁に2倍の配列を検索する最大値関数を書いています。グラフィックディスプレイの前にデータを正規化するためにこれらの関数を使用します。倍精度の配列で最大値を見つけるC++関数?

ダブルスの配列の最大値を見つけるより良い方法はありますか?配列に最大値を見つける標準的な関数はありますか?この操作にはいくつかの固有の機能がありますか?私はASM命令がDSPチップに存在することを覚えています。

答えて

16

std::max_elementと呼ばれる機能があります:

double arr[LENGTH] = /* ... */ 
double max = *std::max_element(arr, arr + LENGTH); 

あなたがこれを行うには#include <algorithm>する必要があります。そのヘッダーにはたくさんのおいしさがあり、STLコンテナーとアルゴリズムライブラリーの詳細については、のようにの方がはるかに簡単です。

私が対象としている限り、生のC++配列の代わりにstd::vectorまたはstd::arrayを探してみることを検討してください。彼らはより安全で使いやすくなっています。

希望すると便利です。

+0

私はstd :: vectorsで置き換えるのが面倒です。私のコードは自動ベクトル化が非常にうまく機能するからです。 – Mikhail

+0

@Misha:怖がらないで、試してみて、いくつかのテストを行って、あなたのパフォーマンスがまだ良いかどうかを確認してください。それは全く不合理な恐怖ではありません。私たちはコードのいくつかのパフォーマンスクリティカルなセクション(ループと浮動小数点演算の多く)で約20%のパフォーマンス低下を経験し、VS 6から2005への移行まで追跡しました。彼らはイテレータと(iirc)境界チェックをチェックしましたデフォルトでオンになっています。 –

関連する問題