В C++, как я получаю международный индекс итератора?

Я должен ухаживать и возвратить индекс элемента двухсторонней очереди, на который указывает итератор. Как я вытаскиваю интервал из итератора?

6
задан user83 1 June 2010 в 21:40
поделиться

4 ответа

Из двух представленных методов:

std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator));

и

std::ptrdiff_t index = some_iterator - some_deque.begin()

... последний имеет преимущество в том, что он применим только к итераторам с произвольным доступом - следовательно, при замене другого контейнера вы не будет случайно получить дорогостоящую операцию (например, O (n) для списков).

2
ответ дан 8 December 2019 в 12:57
поделиться

Вы можете использовать:

std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator));

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

9
ответ дан 8 December 2019 в 12:57
поделиться
std::ptrdiff_t index = std::distance(myDeque.begin(), curIterator);
3
ответ дан 8 December 2019 в 12:57
поделиться

Для итераторов с произвольным доступом вы можете просто использовать вычитание:

size_t index = some_iterator - some_deque.begin()

Очевидно, что это не работает для всех итераторов (например, для std :: list или чего-то еще), но я бы сказал, что есть определенная элегантность в том, что вы можете использовать эту технику только тогда, когда на это потребуется постоянное время. Если в вашем контейнере нет итераторов с произвольным доступом, то, скорее всего, все равно нецелесообразно пытаться найти их индекс.

4
ответ дан 8 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: