web-dev-qa-db-fra.com

Comment puis-je obtenir la valeur maximale (ou minimale) dans un vecteur?

Comment puis-je obtenir la valeur max (ou min) dans un vecteur dans 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 de manière simple et simple 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 eu une erreur?

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

error: demande du membre "begin" dans "cloud", de type non-classe "int [10]"

EDIT: Je n'ai pas pu répondre à la mienne ??? alors je vais le mettre ici ...

Wow, merci pour les réponses rapides! J'ai fini par le faire de cette façon, pensez-vous que c'est ok?

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

cdf est un vecteur.

86
bob blob

En utilisant les drapeaux 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 <typename T, size_t N> const T* mybegin(const T (&a)[N]) { return a; }    
template <typename T, size_t N> const T* myend  (const T (&a)[N]) { return a+N; }

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

#include <iostream>
#include <algorithm>

template <typename T, size_t N> const T* mybegin(const T (&a)[N]) { return a; }    
template <typename T, size_t N> 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 à la fois: /

92
sehe

Si vous souhaitez utiliser la fonction std::max_element(), procédez comme suit:

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

J'espère que cela peut aider.

53
Angie Quijano

Laisser,

 #include <vector>

 vector<int> v {1, 2, 3, -1, -2, -3};

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] (indexé sur la base de 0) et le dernier élément est l'élément le plus grand, 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, vous pouvez l'obtenir par v [sizeOfVector-1] et le premier élément est le plus grand, vous pouvez l'obtenir par v [0].

Si le vecteur n'est pas trié, 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 l'itérateur,

for (vector<int>:: 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 le plus petit ou le plus grand élément d'un vecteur donné)

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

    if(value<smallest_element and i>0)
    {
        smallest_element = value;
    }

    if(value>largest_element and i>0)
    {
        largest_element = value;
    }
    v.Push_back(value);
}

Aussi, vous pouvez obtenir le plus petit/plus grand élément grâce aux fonctions intégrées

#include<algorithm>

int smallest_element = *min_element(v.begin(),v.end());

int largest_element  = *max_element(v.begin(),v.end());

Vous pouvez obtenir le plus petit/le plus grand élément de n'importe quelle plage en utilisant cette fonction. tel que,

vector<int> 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é l'astérisque (*), avant les fonctions min_element ()/max_element (). Parce que tous les deux retournent itérateur. Tous les codes sont en c ++. 

8
Taohidul Islam

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

8
Asha

Vous pouvez l’imprimer directement en utilisant max_element/min_element function . Exemple:

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

  cout<<*min_element(v.begin(),v.end());
5
Kishy Nivas

Dans c ++ 11, vous pouvez utiliser une fonction comme celle-ci:

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

Vous pouvez utiliser max_element pour obtenir la valeur maximale dans le vecteur . L'élément max_element renvoie un itérateur à la valeur la plus grande 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 * avant pour obtenir la valeur . Ainsi, selon le problème, vous pouvez obtenir le maximum d'élément dans un vecteur comme:

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

Cela vous donnera le maximum d'éléments dans votre vecteur "nuage" . J'espère que cela vous aidera.

1
Prashant Shubham

Si vous voulez utiliser un itérateur, vous pouvez faire un placement-new avec un tableau.

std::array<int, 10> icloud = new (cloud) std::array<int,10>;

Notez le manque de () à la fin, ce qui 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 des itérateurs.

(C'est C++ TR1/C++ 11 d'ailleurs)

1
std''OrgnlDave

Ma façon de trouver max ou min valeur dans un vecteur est très simple. 

  • Premièrement, je vais trier le vecteur avecsort ()STLde C++ .
  • Ensuite, pour la valeur min, je prendrai le premier élément du vecteur trié.
  • Ensuite, pour la valeur maximale, je prendrai la dernière valeur du vecteur trié.

Ci-dessous, un code simple 

    sort(myVector.begin(),myVector.end());

    int minimunValue = myVector[0];
    int maximumValue = myVector[myVector.size()-1];

    cout<<minimunValue<<" "<<maximumValue<<endl;
0
Md Nakibul Hassan