2016-12-18 1 views
-1

Я пытаюсь найти наименьшее значение в контейнере std::vector.Как написать собственный код для замены `std :: min_element`, чтобы найти наименьшее значение в векторе

Я знаю std::min_element работает нормально. Но я кодирую чип stm32, поддерживающий c++11. Однако у кросс-компилятора есть некоторые проблемы с заголовком <algorithm>.

Я хочу ясный и эффективный способ сделать это.

Любые предложения будут оценены.

+0

насчет возможных реализаций в этом [ссылка на страницу] (http://en.cppreference.com/w/cpp/algorithm/min_element), вы уже пробовали? –

ответ

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

min теперь содержит наименьшее значение

Простой, эффективный, работая. Итераторы - это сила C++.

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

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

Теперь вы можете заменить "СТД :: min_element" с "мин"

1

Generic std::min_element реализация может выглядеть следующим образом. Он возвращает итератор до минимума и end для пустого диапазона и поддерживает функцию пользовательского сравнения.

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; 
} 
Смежные вопросы