Поиск минимального элемента вектора в 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