[C ++迭代器到const_iterator

问题描述 投票:21回答:2

如何在C ++中从(该容器类的)const_iterator获取(某个容器类的)[C0? iterator中的const_iterator呢?结果insert_iterator应该指向与原始点相同的位置。

c++ stl iterator containers const-iterator
2个回答
27
投票

容器必须提供iterator作为可转换为iterator的类型,因此您可以隐式转换:

const_iterator

Container::iterator it = /* blah */; Container::const_iterator cit = it; s是输出迭代器。这无法将它们转换为必须为正向迭代器的常规std::insert_iterator

另一种插入迭代器may允许这样的事情,但是从标准函数获得的不允许。

我想您可以在Container::iterator周围编写自己的包装程序,从而暴露受保护的成员std::insert_iterator

iter

5
投票

您可以转换它们。示例:

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();

但是我想这不是您要寻找的答案。给我看代码。 :-)

© www.soinside.com 2019 - 2024. All rights reserved.