How do I acquire a const_iterator (of some container class) from an iterator (of that container class) in C++? What about a const_iterator from an insert_iterator? The resulting iterator should point at the same spot as the original does.
Containers are required to provide iterator as a type convertible to const_iterator, so you can convert implicitly:
Container::iterator it = /* blah */; Container::const_iterator cit = it; std::insert_iterators are output iterators. This gives no way to convert them to a regular Container::iterator which must be a forward iterator.
Another kind of insert iterator may allow such a thing, but those obtained from the standard functions don't.
I guess you can write your own wrapper around std::insert_iterator that exposes the protected member iter, though:
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();
You can convert them. Example:
std::vector<int> v; std::vector<int>::iterator it = v.begin(); std::vector<int>::const_iterator cit = it; But I guess that is not the answer you are seeking. Show me code. :-)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With