Ответ 1
std::distance
может максимально эффективно измерять расстояние между двумя итераторами.
std::advance
может максимально увеличить итератор.
Мне все равно не хотелось бы быстро сортировать связанный список:)
Я пытаюсь преобразовать мою реализацию quicksort в шаблон, который можно использовать с другими контейнерами, кроме вектора.
Первоначально я использовал индексы для поиска среднего индекса, например. (first + last) / 2
. Как найти середину двух итераторов?
std::distance
может максимально эффективно измерять расстояние между двумя итераторами.
std::advance
может максимально увеличить итератор.
Мне все равно не хотелось бы быстро сортировать связанный список:)
использование:
http://www.cplusplus.com/reference/std/iterator/distance/
и
Как насчет чего-то подобного?
bool isMovingFirst = true;
while(first != last) {
if(isMovingFirst) {
++first;
} else {
--last;
}
isMovingFirst = !isMovingFirst;
}
Чтобы найти средний итератор, вы должны использовать:
first + (last - first) / 2