C ++: итератор - list.begin () выдает ошибку - PullRequest
0 голосов
/ 22 сентября 2018

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

std::list<int> v;
std::list<int>::iterator iter = v.insert(v.begin(), 1);
int i = iter - v.begin();

Удивительно, но это не такне работает, я получил ошибку.

error: invalid operands to binary expression

В чем проблема?Как заставить это работать?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

v.insert возвращает итератор списка, этот итератор списка удовлетворяет только BiDirectionalIterator .Это означает, что operator- не определено для него.

Чтобы получить расстояние, вы можете использовать std::distance вместо:

int diff = std::distance(v.begin(), iter);
0 голосов
/ 22 сентября 2018

Итераторы контейнера списка не являются итераторами с произвольным доступом и, следовательно, не обеспечивают подстановку.Вы можете использовать std::distance для получения индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...