【筆記】C++ std::min 簡介和使用

std::min() 簡介

min 用來判斷大小值,回傳值為判斷值中的最小值。

「兩值判斷」範例

1
2
3
cout << min(123, 321);  // return 123
cout << min(4.5, 103.0); // return 4.5
cout << min('A', 'D'); // return 'A'

你說既然 int, float, char 都可以比較,那 string 呢?

1
cout << min("Aa", "Ab");

猜猜看答案是什麼?AaAb?還是會報錯?

點我看答案

答案是不一定,要看編譯器的處理,在 gcc 中,會回傳以下答案

1
Ab

這是因為 “Aa” 跟 “Ab” 並非實際存在一個變數位置,因此這兩個實際稱作:字串常量,也就是這兩個會指向某個地址,而剛好,“Ab” 所在的指標地址比 “Aa” 小,因此回傳 “Ab”。

若要實際比較兩個字串,請使用變數存取後比較,否則要先強制轉型態

1
2
3
string s1 = "Aa", s2 = "Ab";
cout << min(string("Aa"), string("Ab")) << '\n';
cout << min(s1, s2) << '\n';
1
2
Aa
Aa

「多值判斷」範例

使用一對 { } 來建構 initializer_list 直接丟進 min 即可得最小值。

1
2
3
4
5
6
7
8
cout << min({3, 5, 67});            // return 3
cout << min({'F', 'a', 'Z', '0'}); // return '0'

initializer_list<int> array1 = {1, 2, 4};
cout << min(array1) << '\n'; // return 1

auto array2 = {555, 8964};
cout << min(array2) << '\n'; // return 555

若要判斷 vector 中的最小值,建議使用 std::min_element