Как использовать диапазон на основе итератора цикла? - PullRequest
2 голосов
/ 27 апреля 2019

У меня есть этот код для алгоритма сортировки вставкой, и мне было интересно, есть ли диапазон, основанный на цикле, эквивалентном циклу for, который я использую.

Я вроде как запутался с тем, какИтератор цикла на основе диапазона работает по сравнению с обычными итераторами контейнера STL.просто простая замена for(auto it:x) явно не работает.

В основном, мой вопрос заключается в том, как я могу разыменовать этот итератор на основе диапазона, чтобы получить соответствующее значение массива.это мой код сортировки вставки:


for (auto it = x.begin(); it != x.end();it++)
 {
        auto insertloc = std::upper_bound(x.begin(), it, *it);

        std::rotate(insertloc, it, it + 1);
}

Этот код работает просто отлично, но я просто хочу знать, могу ли я заменить его для цикла на диапазон.

1 Ответ

3 голосов
/ 27 апреля 2019

Я хочу заменить цикл for на диапазон, основанный на диапазоне.

Это не будет работать в вашем случае использования.Цикл range-for работает, когда вам нужно только значение объекта, которое вы получите, разыменовав итератор.Это не будет работать для вашего случая, так как вы используете итератор в цикле.Не существует стандартного механизма, с помощью которого вы можете получить итератор из значения.

...