Как найти итератор в середине двух итераторов?

Я пытаюсь преобразовать мою реализацию quicksort в шаблон, который можно использовать с другими контейнерами, кроме вектора.

Первоначально я использовал индексы для поиска среднего индекса, например. (first + last) / 2. Как найти середину двух итераторов?

Ответ 1

std::distance может максимально эффективно измерять расстояние между двумя итераторами.

std::advance может максимально увеличить итератор.

Мне все равно не хотелось бы быстро сортировать связанный список:)

Ответ 3

Как насчет чего-то подобного?

bool isMovingFirst = true;
while(first != last) {
  if(isMovingFirst) {
    ++first;
  } else {
    --last;
  }
  isMovingFirst = !isMovingFirst;
}

Ответ 4

Чтобы найти средний итератор, вы должны использовать:

first + (last - first) / 2