2016-12-18 1 views
-1

J'essaie de trouver la plus petite valeur dans un conteneur std::vector. Je sais que std::min_element fonctionne très bien. Mais je suis en train de coder pour une puce stm32, qui supporte c++11. Cependant, le compilateur croisé a quelques problèmes avec l'en-tête <algorithm>.Comment écrire le code propre pour remplacer `std :: min_element` pour trouver la plus petite valeur dans le vecteur

Je veux un moyen clair et efficace de le faire.

Toutes les suggestions seront appréciées.

+0

Et les implémentations possibles dans cette [page de référence] (http://en.cppreference.com/w/cpp/algorithm/min_element), avez-vous déjà essayé? –

Répondre

0
std::vector<int> myVector = /* ... */; 
int min = myVector[0]; 
for (auto itr = myVector.cbegin(); itr != myVector.cend(); itr ++) 
    { 
    if (*itr < min) 
     min = *itr; 
    } 

min contient maintenant la plus petite valeur

Simple, efficace, travailler. Les itérateurs sont une force de C++.

0
vector<int> v(N); 
int min = v[0]; 

for (int x:V) 
    if (x<min) min = x; 

Maintenant, vous pouvez remplacer "std :: min_element" avec "min"

1

Générique std::min_element mise en œuvre pourrait ressembler à ceci. Il renvoie l'itérateur au minimum et end pour la plage vide et prend en charge la fonction de comparateur personnalisé.

template 
< 
    typename ForwardIt, 
    typename Cmp = std::less<typename std::iterator_traits<ForwardIt>::value_type> 
> 
ForwardIt min_element(ForwardIt begin, ForwardIt end, Cmp cmp = Cmp{}) 
{ 
    if (begin == end) 
     return end; 
    ForwardIt min = begin++; 
    for (; begin != end; ++begin) 
     if (cmp(*begin, *min)) 
      min = begin; 
    return min; 
}