@NikSIk31

Stl c++ min elem?

Как работает функция min_element в stl ?
гуглил, что-то не выходит понять. Она если принимает третий параметр с двумя значениями, то этот параметр функтор, а значения ( int следующий, int текущий ) , верно???
я сделал return , но почему она не возвращает значения сразу , а только в конце? каким образом происходит сравнение?
написал код чтобы легче было ориентироваться
this->result = std::min_element(this->array.begin(), this->array.end(), [](int next, int current) {

        int nextMod = (next < 0 ? next * (-1) : next);
        int currentMod = (current < 0 ? current * (-1) : current);

        std::cout << next << ' ' << current << " ::: nextMod < currentMod ::: " << (nextMod < currentMod) <<  endl;

        return nextMod < currentMod;
    });

5da4b9225fe53340155452.png
  • Вопрос задан
  • 272 просмотра
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
гуглил, что-то не выходит понять

https://en.cppreference.com/w/cpp/algorithm/min_element

но почему она не возвращает значения сразу , а только в конце? каким образом происходит сравнение?

min_element
template<class ForwardIt, class Compare>
ForwardIt min_element(ForwardIt first, ForwardIt last, Compare comp)
{
    if (first == last) return last;
 
    ForwardIt smallest = first;
    ++first;
    for (; first != last; ++first) { // не возвращает значения сразу
        if (comp(*first, *smallest)) { //  каким образом происходит сравнение
            smallest = first;
        }
    }
    return smallest; // а только в конце
}


написал код чтобы легче было ориентироваться

https://ru.cppreference.com/w/cpp/numeric/math/abs
#include<cmath>
// ...

int result = *min_element(array.begin(), array.end(), [](int a, int b) { return abs(a) < abs(b); });

// ...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы