Comment puis-je obtenir la valeur max (ou min) dans un vecteur en C ++ ?
J'ai vu quelques solutions pour cela sur Google mais aucune d'entre elles n'a de sens pour moi :(
Quelqu'un peut-il expliquer d'une manière simple et directe comment obtenir la valeur maximale ou minimale d'un vecteur s'il vous plaît? et ai-je tort de supposer que ce serait plus ou moins la même chose avec un tableau?
J'ai besoin d'un itérateur, non? Je l'ai essayé avec max_element
mais j'ai continué à recevoir une erreur?
vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());
erreur: demande du membre 'begin' dans 'cloud', qui est de type non-classe 'int [10]'
EDIT: je n'ai pas pu répondre à la mienne ??? donc je vais le mettre ici ...
Wow, merci pour les réponses rapides! J'ai fini par le faire de cette façon, tu crois que c'est ok?
for (unsigned int i = 0; i < cdf.size(); i++)
if (cdf[i] < cdfMin)
cdfMin = cdf[i];
où cdf
est un vecteur.
cloud
n'est pas un conteneur STL, mais plutôt unint[10]
. Fondamentalement,cloud
n'a pas de membre.begin()
. Vous voudrez peut-être obtenir un livre de base sur le C ++ à moins que vous ne fassiez que cette seule chose.int[10]
". Comment cela peut-il être alors un vecteur?Réponses:
En utilisant les indicateurs de compilation c ++ 11 / c ++ 0x, vous pouvez
Sinon, écrivez le vôtre:
Voyez-le en direct sur http://ideone.com/aDkhW :
Oh, et utilisez
std::minmax_element(...)
si vous avez besoin des deux à la fois: /la source
Si vous souhaitez utiliser la fonction
std::max_element()
, la façon dont vous devez le faire est:J'espère que cela peut aider.
la source
*
en*max_element
?Laisser,
Si le vecteur est trié par ordre croissant ou décroissant, vous pouvez le trouver avec la complexité O (1).
Pour un vecteur d'ordre croissant, le premier élément est le plus petit élément, vous pouvez l'obtenir par v [0] (indexation basée sur 0) et le dernier élément est le plus grand élément, vous pouvez l'obtenir par v [sizeOfVector-1].
Si le vecteur est trié par ordre décroissant, le dernier élément est le plus petit élément, vous pouvez l'obtenir par v [sizeOfVector-1] et le premier élément est le plus grand élément, vous pouvez l'obtenir par v [0].
Si le vecteur n'est pas trié, vous devez itérer sur le vecteur pour obtenir le plus petit / le plus grand élément.Dans ce cas, la complexité temporelle est O (n), ici n est la taille du vecteur.
Vous pouvez utiliser l'itérateur,
Vous pouvez le calculer dans la section d'entrée (lorsque vous devez trouver le plus petit ou le plus grand élément d'un vecteur donné)
Vous pouvez également obtenir le plus petit / le plus grand élément par des fonctions intégrées
Vous pouvez obtenir le plus petit / le plus grand élément de n'importe quelle plage en utilisant ces fonctions. tel que,
J'ai utilisé l'astérisque (*), avant les fonctions min_element () / max_element (). Parce que les deux renvoient l'itérateur. Tous les codes sont en c ++.
la source
min_element
etmax_element
renvoyer un itérateur , pas un pointeur. Cependant, pour être techniquement correct, un pointeur est un sous-ensemble d'un itérateur. Voir: stackoverflow.com/questions/2728190/…En supposant que le cloud soit,
int cloud[10]
vous pouvez le faire comme ceci:int *p = max_element(cloud, cloud + 10);
la source
Vous pouvez l'imprimer directement en utilisant la fonction max_element / min_element. Par exemple:
la source
En c ++ 11, vous pouvez utiliser une fonction comme celle-ci:
la source
std::max_element
parce que ...?Si vous souhaitez utiliser un itérateur, vous pouvez effectuer un nouveau placement avec un tableau.
Notez l'absence d'un
()
à la fin, c'est important. Cela crée une classe de tableau qui utilise cette mémoire comme stockage et possède des fonctionnalités STL telles que les itérateurs.(C'est C ++ TR1 / C ++ 11 d'ailleurs)
la source
Vous pouvez utiliser max_element pour obtenir la valeur maximale de vector. L'élément max_element renvoie un itérateur à la plus grande valeur de la plage, ou en dernier si la plage est vide. Comme un itérateur est comme des pointeurs (ou vous pouvez dire que le pointeur est une forme d'itérateur), vous pouvez utiliser un * devant lui pour obtenir la valeur. Donc, selon le problème, vous pouvez obtenir l'élément maximum dans un vecteur comme:
Cela vous donnera l'élément maximum dans votre vecteur "nuage". J'espère que ça aide.
la source
Juste ça:
la source
int cloud[10];
et c'est l'utilisation de nombres magiques.La manière nooby complète ... en C
la source
vector
for
boucle. Dans l'ensemble, une très mauvaise réponse.