c++迭代器到const_iterator
C++ iterator to const_iterator
如何从c++中的iterator
(该容器类)获得const_iterator
(某些容器类)?从一个insert_iterator
变成一个const_iterator
呢?生成的iterator
应该指向与原来相同的位置。
容器需要提供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();
您可以转换它们。例子:
std::vector<int> v;
std::vector<int>::iterator it = v.begin();
std::vector<int>::const_iterator cit = it;
但我猜这不是你想要的答案。给我看代码。: -)