24

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

4

2 回答 2

29

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

Container::iterator it = /* blah */;
Container::const_iterator cit = it;

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();
于 2011-10-13T19:32:43.860 回答
5

You can convert them. Example:

std::vector<int> v;
std::vector<int>::iterator it = v.begin();
std::vector<int>::const_iterator cit = it;

But I guess that is not the answer you are seeking. Show me code. :-)

于 2011-10-13T19:33:43.223 回答