Если у меня есть std::vector<int>
, я могу получить индекс минимального элемента, вычитая два итератора:
int min_index = std::min_element(vec.begin(), vec.end()) - vec.begin();
Однако, с контейнерами, которые не имеют итераторов произвольного доступа, например std::list<int>
, это не работает. Конечно, можно сделать что-то вроде
int min_index = std::difference(l.begin(), std::min_element(l.begin(), l.end()));
но затем я должен дважды повторить список.
Могу ли я получить индекс элемента с минимальным значением с помощью алгоритмов STL, выполняя только одну итерацию по списку, или мне нужно кодировать свой цикл for?