std :: distance не дает ожидаемого результата - PullRequest
0 голосов
/ 09 мая 2020

std :: distance возвращает то же значение в a для l oop, несмотря на то, что один из аргументов изменяется на каждом l oop.

#include <vector>
#include <iostream>

using namespace std;

int main() {
    vector<int> q{1, 2, 3, 4, 5};
    for (auto i = q.rbegin(); i != q.rend(); i++) {
        static int index_dif = distance(i, q.rend());
        cout << *i << ": " << index_dif << endl;
    }
    return 0;
}

Результат:

5: 5
4: 5
3: 5
2: 5
1: 5

Несмотря на то, что i увеличивается на каждом l oop, я бы ожидал, что расстояние между q.rend() и им будет сокращаться по мере увеличения l oop, например:

5: 5
4: 4
3: 3
2: 2
1: 1

Вместо этого он, кажется, каждый раз дает расстояние между q.rbegin() и q.rend().

1 Ответ

5 голосов
/ 09 мая 2020
Переменные

static инициализируются только один раз, поэтому эта строка:

static int index_dif = distance(i, q.rend());

будет использовать только первое значение i для инициализации index_dif.

Удалите static, и вы должны увидеть ожидаемый результат.

Вот демонстрация .

...