const_iterator的C++迭代器

Tho*_*ing 19 c++ iterator stl

如何const_iteratoriteratorC++中获取a ?怎么样一个const_iteratorinsert_iterator?结果iterator应该指向与原始位置相同的位置.

R. *_*des 25

容器需要提供iterator可转换的类型const_iterator,因此您可以隐式转换:

Container::iterator it = /* blah */;
Container::const_iterator cit = it;
Run Code Online (Sandbox Code Playgroud)

std::insert_iterators是输出迭代器.这无法将它们转换为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();
Run Code Online (Sandbox Code Playgroud)


Flo*_*ian 5

你可以转换它们.例:

std::vector<int> v;
std::vector<int>::iterator it = v.begin();
std::vector<int>::const_iterator cit = it;
Run Code Online (Sandbox Code Playgroud)

但我想这不是你所寻求的答案.给我看一下代码.:-)