今日はSTL Containers ではなくSTL algorithmsの紹介。
配列の最大値、最大解(最大値を与える要素)を出力するプログラムを普通に書いてみます。
#define SIZE(buff) (sizeof(buff)/sizeof(buff[0]))これが何気に面倒臭かったりします。最大値だけならそうでもない(ループ内でmax使えばいいだけ)ですが、最大値を与えるindexを求める場合は、ちょっとだけソースコードが長くなってしまい面倒です。
#define REP(i, n) for(int i=0; i<(int)(n); i++)
int main() {
int x[] = {1,3,5,7, 10, 0, 4, 20, 4, 6};
int mx = -1;
REP(i, SIZE(x)) {
if (mx == -1 || x[mx] < x[i])
mx = i;
}
printf("max element=%d, max value=%d\n", mx, x[mx]);
return 0;
}
そんなときは、STL Algorithmsの出番です。
これでOKです。最大値・最大解と、ついでに最小値・最小解も求めてみましょう。
int main() {かなりシンプルですね。戻り値はiteratorですが、配列の場合はポインタとの引き算もできるみたいです。これを使えば、上の例のように最小値(最大値)を与えるindexも簡単に出ますね!
int x[] = {1,3,5,7, 10, 0, 4, 20, 4, 6};
// search max
int *mx = max_element(x, x+SIZE(x));
printf("max element=%d, max value=%d\n", mx - x, *mx);
// search min
int *mn = min_element(x, x+SIZE(x));
printf("min element=%d, min value=%d\n", mn - x, *mn);
return 0;
}
0 件のコメント:
コメントを投稿