Индекс минимального элемента в std::list

Если у меня есть std::vector, я могу получить индекс минимального элемента, вычитая два итератора:

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

Однако с контейнерами, которые не нет итераторов произвольного доступа, например std::list, это не работает. Конечно, можно сделать что-то вроде

int min_index = std::difference(l.begin(), std::min_element(l.begin(), l.end()));

, но тогда мне придется дважды пройтись по списку.

Могу ли я получить индекс элемента с минимальным значением с помощью алгоритмов STL, выполнив только одну итерацию по списку, или мне нужно написать свой собственный цикл for?

7
задан user1181282 13 March 2012 в 23:59
поделиться