在C++中,如何从某个容器类的iterator
获取一个const_iterator
?对于insert_iterator
,如何获取一个const_iterator
?最终的const_iterator
应该指向与原始iterator
相同的位置。
在C++中,如何从某个容器类的iterator
获取一个const_iterator
?对于insert_iterator
,如何获取一个const_iterator
?最终的const_iterator
应该指向与原始iterator
相同的位置。
容器需要提供可转换为const_iterator
的类型作为iterator
,因此您可以隐式地进行转换:
Container::iterator it = /* blah */;
Container::const_iterator cit = it;
std::insert_iterator
是输出迭代器,这意味着无法将它们转换为正常的Container::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;