std:: minmax
|
Défini dans l'en-tête
<algorithm>
|
||
|
template
<
class
T
>
std:: pair < const T & , const T & > minmax ( const T & a, const T & b ) ; |
(1) |
(depuis C++11)
(constexpr depuis C++14) |
|
template
<
class
T,
class
Compare
>
std::
pair
<
const
T
&
,
const
T
&
>
minmax
(
const
T
&
a,
const
T
&
b,
|
(2) |
(depuis C++11)
(constexpr depuis C++14) |
|
template
<
class
T
>
std:: pair < T, T > minmax ( std:: initializer_list < T > ilist ) ; |
(3) |
(depuis C++11)
(constexpr depuis C++14) |
|
template
<
class
T,
class
Compare
>
std::
pair
<
T, T
>
minmax
(
std::
initializer_list
<
T
>
ilist,
|
(4) |
(depuis C++11)
(constexpr depuis C++14) |
Retourne la plus petite et la plus grande des valeurs données.
Table des matières |
Paramètres
| a, b | - | les valeurs à comparer |
| ilist | - | liste d'initialisation avec les valeurs à comparer |
| comp | - |
objet fonction de comparaison (c'est-à-dire un objet qui satisfait aux exigences de
Compare
) qui renvoie
true
si le premier argument est
inférieur
au second.
La signature de la fonction de comparaison doit être équivalente à ce qui suit : bool cmp ( const Type1 & a, const Type2 & b ) ;
Bien que la signature n'ait pas besoin d'avoir
const
&
, la fonction ne doit pas modifier les objets qui lui sont passés et doit pouvoir accepter toutes les valeurs du type (éventuellement const)
|
Valeur de retour
Complexité
| 3N |
| 2 |
| 3N |
| 2 |
Implémentation possible
| minmax (1) |
|---|
| minmax (2) |
| minmax (3) |
template<class T> constexpr std::pair<T, T> minmax(std::initializer_list<T> ilist) { auto p = std::minmax_element(ilist.begin(), ilist.end()); return std::pair(*p.first, *p.second); } |
| minmax (4) |
template<class T, class Compare> constexpr std::pair<T, T> minmax(std::initializer_list<T> ilist, Compare comp) { auto p = std::minmax_element(ilist.begin(), ilist.end(), comp); return std::pair(*p.first, *p.second); } |
Notes
Pour les surcharges
(
1,2
)
, si l'un des paramètres est un temporaire, la référence retournée devient une référence pendante à la fin de l'expression complète qui contient l'appel à
minmax
:
int n = 1; auto p = std::minmax(n, n + 1); int m = p.first; // correct int x = p.second; // comportement indéfini // Notez que les liaisons structurées présentent le même problème auto [mm, xx] = std::minmax(n, n + 1); xx; // comportement indéfini
Exemple
#include <algorithm> #include <cstdlib> #include <ctime> #include <iostream> #include <vector> int main() { std::vector<int> v{3, 1, 4, 1, 5, 9, 2, 6}; std::srand(std::time(0)); std::pair<int, int> bounds = std::minmax(std::rand() % v.size(), std::rand() % v.size()); std::cout << "v[" << bounds.first << "," << bounds.second << "]: "; for (int i = bounds.first; i < bounds.second; ++i) std::cout << v[i] << ' '; std::cout << '\n'; }
Sortie possible :
v[2,7]: 4 1 5 9 2
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | S'applique à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 2239 | C++11 |
T
devait être
LessThanComparable
pour les surcharges
(
2,4
)
|
non requis |
Voir aussi
|
renvoie la plus petite des valeurs données
(modèle de fonction) |
|
|
renvoie la plus grande des valeurs données
(modèle de fonction) |
|
|
(C++11)
|
renvoie les plus petits et les plus grands éléments d'une plage
(modèle de fonction) |
|
(C++20)
|
renvoie le plus petit et le plus grand de deux éléments
(objet fonction algorithme) |