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_iterator
s 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();
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…