Как мне получить const_iterator
из iterator
в С++? Что относительно const_iterator
от insert_iterator
? Полученный iterator
должен указывать на то же место, что и оригинал.
Итератор С++ для const_iterator
Ответ 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;
Но я думаю, что это не тот ответ, который вы ищете. Покажите мне код.: -)