Поиск минимального элемента вектора в C++

Я пытаюсь найти минимальный элемент вектора в C++. Я хочу вернуть как значение самого низкого элемента, так и положение индекса внутри вектора. Вот что я пробовал,

    auto minIt = std::min_element(vec.begin(), vec.end());
    auto minElement = *minIt;
       std::cout << "nMinIT " << &minIt << " while minElement is " << minElement << "n"; 

возвращает следующее,

MinIT 8152610 while minElement is 8152610

Как получить индекс i vec (i), где это значение?

1 ответов


возвращение std::min_element Это итератор, который вы запутываете своим использованием auto.

вы можете получить его положение в векторе, используя

std::distance(vec.begin(), std::min_element(vec.begin(), vec.end()));

который больше "стандартная библиотека C++" - esque, чем менее общий

std::min_element(vec.begin(), vec.end()) - vec.begin();

хотя есть расхождения во мнениях по существу в любом случае. См.каков наиболее эффективный способ получить индекс итератора СТД::вектор?

Дополнительные ссылки:http://en.cppreference.com/w/cpp/algorithm/min_element и http://en.cppreference.com/w/cpp/iterator/distance