Comment puis-je obtenir la valeur max (ou min) dans un vecteur?

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’avait 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 est-ce que je me trompe en supposant que ce serait plus ou moins la même chose avec un tableau?

J’ai besoin d’un iterator non? Je l’ai essayé avec max_element mais max_element continué à avoir une erreur?

 vector::const_iterator it; it = max_element(cloud.begin(), cloud.end()); 

erreur: demande de membre ‘begin’ dans ‘cloud’, qui est de type non-classe ‘int [10]’

EDIT: je n’ai pas pu répondre aux miens ??? alors je vais le mettre ici …

Wow, merci pour les réponses rapides! J’ai fini par le faire de cette façon, est-ce que ça vous va?

 for (unsigned int i = 0; i < cdf.size(); i++) if (cdf[i] < cdfMin) cdfMin = cdf[i]; 

cdf est un vecteur.

En utilisant les indicateurs de compilation c ++ 11 / c ++ 0x, vous pouvez

 auto it = max_element(std::begin(cloud), std::end(cloud)); // c++11 

Sinon, écrivez le vôtre:

 template  const T* mybegin(const T (&a)[N]) { return a; } template  const T* myend (const T (&a)[N]) { return a+N; } 

Voir en direct sur http://ideone.com/aDkhW :

 #include  #include  template  const T* mybegin(const T (&a)[N]) { return a; } template  const T* myend (const T (&a)[N]) { return a+N; } int main() { const int cloud[] = { 1,2,3,4,-7,999,5,6 }; std::cout << *std::max_element(mybegin(cloud), myend(cloud)) << '\n'; std::cout << *std::min_element(mybegin(cloud), myend(cloud)) << '\n'; } 

Oh, et utilisez std::minmax_element(...) si vous avez besoin des deux en même temps: /

Si vous voulez utiliser la fonction std::max_element() , vous devez:

 double max = *max_element(vector.begin(), vector.end()); cout<<"Max value: "< 

J'espère que cela peut aider.

En supposant que le cloud est int cloud[10] vous pouvez le faire comme ceci: int *p = max_element(cloud, cloud + 10);

Vous pouvez l’imprimer directement en utilisant la fonction max_element / min_element. Par exemple:

  cout<<*max_element(v.begin(),v.end()); cout<<*min_element(v.begin(),v.end()); 

Laisser,

  #include  vector v {1, 2, 3, -1, -2, -3}; 

Si le vecteur est sortingé par ordre croissant ou décroissant, vous pouvez le trouver avec la complexité O (1).

Pour un vecteur d’ordre ascendant, le premier élément est le plus petit élément, vous pouvez l’obtenir par v [0] (indexation basée sur 0) et dernier élément est l’élément le plus grand, vous pouvez l’obtenir par v [sizeOfVector-1].

Si le vecteur est sortingé par ordre décroissant, le dernier élément est le plus petit élément, vous pouvez l’obtenir par v [sizeOfVector-1] et first element est le plus grand élément, vous pouvez l’obtenir par v [0].

Si le vecteur n’est pas sortingé, vous devez parcourir le vecteur pour obtenir l’élément le plus petit / le plus grand. Dans ce cas, la complexité temporelle est O (n), ici n est la taille du vecteur.

 int smallest_element = v[0]; //let, first element is the smallest one int largest_element = v[0]; //also let, first element is the biggest one for(int i = 1; i < v.size(); i++) //start iterating from the second element { if(v[i] < smallest_element) { smallest_element = v[i]; } if(v[i] > largest_element) { largest_element = v[i]; } } 

Vous pouvez utiliser un iterator,

 for (vector:: iterator it = v.begin(); it != v.end(); it++) { if(*it < smallest_element) //used *it (with asterisk), because it's an iterator { smallest_element = *it; } if(*it > largest_element) { largest_element = *it; } } 

Vous pouvez le calculer dans la section d’entrée (lorsque vous devez trouver l’élément le plus petit ou le plus grand d’un vecteur donné)

 int smallest_element, largest_element, value; vector  v; int n;//n is the number of elements to enter cin >> n; for(int i = 0;i>value; if(i==0) { smallest_element= value; //smallest_element=v[0]; largest_element= value; //also, largest_element = v[0] } if(value0) { smallest_element = value; } if(value>largest_element and i>0) { largest_element = value; } v.push_back(value); } 

Vous pouvez également obtenir l’élément le plus petit / le plus grand en intégrant des fonctions

 #include int smallest_element = *min_element(v.begin(),v.end()); int largest_element = *max_element(v.begin(),v.end()); 

Vous pouvez obtenir l’élément le plus petit / le plus grand de n’importe quelle plage en utilisant ces fonctions. tel que,

 vector v {1,2,3,-1,-2,-3}; cout << *min_element(v.begin(), v.begin() + 3); //this will print 1,smallest element of first three elements cout << *max_element(v.begin(), v.begin() + 3); //largest element of first three elements cout << *min_element(v.begin() + 2, v.begin() + 5); // -2, smallest element between third and fifth element (inclusive) cout << *max_element(v.begin() + 2, v.begin()+5); //largest element between third and first element (inclusive) 

J'ai utilisé un astérisque (*), avant les fonctions min_element () / max_element (). Parce que les deux retournent l'iterator. Tous les codes sont en c ++.

En c ++ 11, vous pouvez utiliser certaines fonctions comme celles-ci:

 int maxAt(std::vector& vector_name) { int max = INT_MIN; for (auto val : vector_name) { if (max < val) max = val; } return max; } 

Si vous souhaitez utiliser un iterator, vous pouvez effectuer un nouveau placement avec un tableau.

 std::array icloud = new (cloud) std::array; 

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 iterators.

(Ceci est C ++ TR1 / C ++ 11)

Vous pouvez utiliser max_element pour obtenir la valeur maximale dans vector. La valeur max_element renvoie un iterator à la plus grande valeur de la plage ou à la dernière si la plage est vide. Comme un iterator est comme des pointeurs (ou que vous pouvez dire que le pointeur est une forme d’iterator), vous pouvez utiliser un * avant la valeur. Donc, selon le problème, vous pouvez obtenir l’élément maximal dans un vecteur comme:

 int max=*max_element(cloud.begin(), cloud.end()); 

Il vous donnera le maximum d’éléments dans votre vecteur “nuage”. J’espère que cela aide.

 #include  #include  int main() { int vector[500]; vector[0] = 100; vector[1] = 2; vector[2] = 1239; vector[3] = 5; vector[4] = 10; vector[5] = 1; vector[6] = 123; vector[7] = 1000; vector[8] = 9; vector[9] = 123; vector[10] = 10; int i = 0; int winner = vector[0]; for(i=0;i < 10; i++) { printf("vector = %d \n", vector[i]); if(winner > vector[i]) { printf("winner was %d \n", winner); winner = vector[i]; printf("but now is %d \n", winner); } } printf("the minimu is %d", winner); } 

La manière complète de nooby … en C