Comment puis-je trouver le max élément dans un vecteur (C++)?
Voici mon code. J'ai omis de mentionner le code pour le vecteur, car il n'était pas important.
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> scores;
//code to make vector
cout << "High score: " << scores[std::max(scores.begin(), scores.end())] << endl;
system("pause");
}
C'est ma compréhension que std::max renvoie un itérateur, mais je ne sais pas vraiment quoi faire avec l'itérateur. J'ai vu l'exemple
*max(scores.begin(), scores.end())
pour obtenir le retour d'un index au lieu d'un itérateur, mais il se l'erreur
Expression: vector iterator not dereferencable
J'ai essayé d'utiliser l'itérateur, puis en utilisant std::distance
vector<int>::iterator high = std::max(scores.begin(), scores.end());
cout << "High score: " << scores[std::distance(scores.begin(), high)] << endl;
mais je reçois l'erreur
Expression: vector subscript is out of range.
Quelle serait la meilleure façon de résoudre ce problème?
- Vous utilisez une fonction par des moyens détournés, nommé
std::max_element
.std::max
ne pas faire ce que vous semblez penser que ce n'est, comme vous avez pu facilement découvert par la lecture de la documentation.
Vous devez vous connecter pour publier un commentaire.
Il est standard algorithme nommé
std::max_element
déclaré dans l'en-tête<algorithm>
qui fait ce que vous avez besoin.Par exemple
Il est supposé que le vecteur n'est pas vide.
Que pour cet appel
ensuite, il retourne au maximum itérateur entre ces deux itérateurs. Et l'itérateur qui correspond à
end()
est toujours supérieur ou égal à (si le vecteur est vide) l'itérateur qui correspond àbegin()
.Meilleur moyen est d'utiliser max_element:
Si vous voulez un max sans se préoccuper du temps de la complexité
vous pouvez également l'utiliser (pas conseillé tout de même):
Vous devez utiliser la première façon de le seul!