Подтвердить что ты не робот

Итератор С++ для const_iterator

Как мне получить const_iterator из iterator в С++? Что относительно const_iterator от insert_iterator? Полученный iterator должен указывать на то же место, что и оригинал.

4b9b3361

Ответ 1

Контейнеры должны предоставлять iterator как тип, конвертируемый в const_iterator, поэтому вы можете конвертировать неявно:

Container::iterator it = /* blah */;
Container::const_iterator cit = it;

std::insert_iterator выводятся итераторы. Это не дает возможности преобразовать их в обычный Container::iterator, который должен быть итератором пересылки.

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

Я думаю, вы можете написать свою собственную оболочку вокруг std::insert_iterator, которая предоставляет защищенный член iter, хотя:

template <typename Container>
class exposing_insert_iterator : public std::insert_iterator<Container> {
public:
    exposing_insert_iterator(std::insert_iterator<Container> it)
    : std::insert_iterator<Container>(it) {}
    typename Container::iterator get_iterator() const {
        return std::insert_iterator<Container>::iter;
    }
};

// ...
std::insert_iterator<Container> ins_it;
exposing_insert_iterator<Container> exp_it = ins_it;
Container::iterator it = exp_it.get_iterator();

Ответ 2

Вы можете конвертировать их. Пример:

std::vector<int> v;
std::vector<int>::iterator it = v.begin();
std::vector<int>::const_iterator cit = it;

Но я думаю, что это не тот ответ, который вы ищете. Покажите мне код.: -)