const_iterator的C ++迭代器

时间:2011-10-13 19:13:15

标签: c++ stl iterator

如何从C ++中的const_iterator获取iterator?来自const_iterator的{​​{1}}怎么样?结果insert_iterator应指向与原始位置相同的位置。

2 个答案:

答案 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;

但我猜这不是你想要的答案。给我看一下代码。 : - )