如何从C ++中的const_iterator
获取iterator
?来自const_iterator
的{{1}}怎么样?结果insert_iterator
应指向与原始位置相同的位置。
答案 0 :(得分:23)
容器需要提供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();
答案 1 :(得分:5)
你可以转换它们。例如:
std::vector<int> v;
std::vector<int>::iterator it = v.begin();
std::vector<int>::const_iterator cit = it;
但我猜这不是你想要的答案。给我看一下代码。 : - )