Индекс и итератор

Уважаемые знатоки, расскажите как правильно сделать преобразование из индекса в итератор и обратно.

Например, есть вектор. Доступ к его элементам можно получить посредством оператора [], метода at() и итераторов. Если я нашел нужный мне элемент через итератор, то как мне сказать пользователю, что это элемент в такой-то позиции. И обратно: некоторые методы вектора работают только с итераторами (например insert); как преобразовать известный индекс к итератору?

index = someIterator - vec.begin();

или воспользоваться std::distance:

index = std::distance(vec.begin(), someIterator);

На счет первого я подозревал. Но думал, что есть какая-то функция, которая итератор переводит в индекс без явного обращения к begin().

Второе видимо просто тоже, что первое, но в «красивом» виде.

Значит ли это, что итератор в себе не держит информации к какому контейнеру он относится?

Второе — работает и для других типов итераторов,
но с соответствующей сложностью.

И да, итераторы не связаны с контейнерами,
на элементы которых они «ссылаются».

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.