J'essaye d'écrire une fonction qui renvoie une paire de valeurs d'un conteneur STL.Fonction de modèle STL pour renvoyer une paire
template <typename T>
std::pair<typename T::value_type,typename T::value_type> getMinMax(T &container) {
auto min = *(container.begin());
auto max = *(container.begin());
for (auto it : container) {
if (min > (*it)) {
min = (*it);
}
if (max < (*it)) {
max = (*it);
}
}
return std::make_pair(min, max);
};
int main() {
std::vector<int> c{1, 2, 3, 4, 5};
auto p = getMinMax(c);
std::cout << "min: " << p.first << " max: " << p.second << "\n";
}
Je reçois une erreur:
error: indirection requires pointer operand ('int' invalid) if (min > (*it)) {
Je ne sais pas comment faire face à cela. En plus de cette erreur, existe-t-il un meilleur moyen d'implémenter le comportement souhaité?
http://fr.cppreference.com/w/cpp/algorithm/minmax – Justin
* Existe-t-il une meilleure façon de mettre en œuvre le comportement souhaité? *. Oui, ['std :: minmax_element'] (http://fr.cppreference.com/w/cpp/algorithm/minmax_element) – NathanOliver
@ user1211030 Dans cet extrait de code pour (auto it: container) { if (min> (* it)) { min = (* it); } ce n'est pas un itérateur ou un pointeur. Il a le type de valeur. Donc, supprimez le déréférencement. –