std::min
| Definiert in Header <algorithm> |
||
template< class T > const T& min( const T& a, const T& b ); |
(1) | (constexpr seit C++14) |
template< class T, class Compare > const T& min( const T& a, const T& b, Compare comp ); |
(2) | (constexpr seit C++14) |
template< class T > T min( std::initializer_list<T> ilist ); |
(3) | (seit C++11) (constexpr seit C++14) |
template< class T, class Compare > T min( std::initializer_list<T> ilist, Compare comp ); |
(4) | (seit C++11) (constexpr seit C++14) |
Gibt den kleineren der gegebenen Werte zurück.
T nicht LessThanComparable ist, ist das Verhalten undefiniert.T nicht LessThanComparable ist, ist das Verhalten undefiniert.Inhalt |
[bearbeiten] Parameter
| a, b | - | die zu vergleichenden Werte |
| ilist | - | Initialisierungsliste mit den zu vergleichenden Werten |
| cmp | - | Vergleichsfunktions-Objekt (d.h. ein Objekt, das die Anforderungen an Compare erfüllt), das true zurückgibt, wenn a *kleiner* als b ist. Die Signatur der Vergleichsfunktion sollte äquivalent zu Folgendem sein bool cmp(const Type1& a, const Type2& b); Obwohl die Signatur nicht const& haben muss, darf die Funktion die übergebenen Objekte nicht modifizieren und muss alle Werte vom Typ (möglicherweise const) |
[bearbeiten] Rückgabewert
[bearbeiten] Komplexität
[bearbeiten] Mögliche Implementierung
| min (1) |
|---|
template<class T> const T& min(const T& a, const T& b) { return (b < a) ? b : a; } |
| min (2) |
template<class T, class Compare> const T& min(const T& a, const T& b, Compare comp) { return (comp(b, a)) ? b : a; } |
| min (3) |
template<class T> T min(std::initializer_list<T> ilist) { return *std::min_element(ilist.begin(), ilist.end()); } |
| min (4) |
template<class T, class Compare> T min(std::initializer_list<T> ilist, Compare comp) { return *std::min_element(ilist.begin(), ilist.end(), comp); } |
[bearbeiten] Hinweise
Das Erfassen des Ergebnisses von std::min per Referenz erzeugt eine hängende Referenz, wenn einer der Parameter ein temporäres Objekt ist und dieser Parameter zurückgegeben wird.
int n = -1; const int& r = std::min(n + 2, n * 2); // r is dangling
[bearbeiten] Beispiel
#include <algorithm> #include <iostream> #include <string_view> int main() { std::cout << "smaller of 10 and 010 is " << std::min(10, 010) << '\n' << "smaller of 'd' and 'b' is '" << std::min('d', 'b') << "'\n" << "shortest of \"foo\", \"bar\", and \"hello\" is \"" << std::min({"foo", "bar", "hello"}, [](const std::string_view s1, const std::string_view s2) { return s1.size() < s2.size(); }) << "\"\n"; }
Ausgabe
smaller of 10 and 010 is 8 smaller of 'd' and 'b' is 'b' shortest of "foo", "bar", and "hello" is "foo"
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 281 | C++98 | T musste für die Überladungen (1,2) CopyConstructible sein. |
nicht erforderlich. |
| LWG 2239 | C++98 C++11 |
1. T musste für die Überladungen (2) (C++98) und (4) (C++11) LessThanComparable sein.überladungen (2) (C++98) und (4) (C++11) 2. Die Komplexitätsanforderungen fehlten. |
1. Nicht erforderlich 2. Die Anforderungen wurden hinzugefügt. |
[bearbeiten] Siehe auch
| Gibt den größeren der beiden Werte zurück (Funktionstemplate) | |
| (C++11) |
gibt die kleinere und größere von zwei Elementen zurück (Funktionsvorlage) |
| gibt das kleinste Element in einem Bereich zurück (Funktionsvorlage) | |
| (C++17) |
klemmt einen Wert zwischen einem Paar von Grenzwerte (Funktionsvorlage) |
| (C++20) |
Gibt den kleineren der beiden Werte zurück (Algorithmus-Funktionsobjekt) |