const_iterator的C ++迭代器 [英] C++ iterator to const_iterator

查看:126
本文介绍了const_iterator的C ++迭代器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从C ++中的迭代器获取 const_iterator insert_iterator 中的 const_iterator 怎么样?生成的迭代器应该指向与原始位置相同的位置。

How do I acquire a const_iterator from an iterator in C++? What about a const_iterator from an insert_iterator? The resulting iterator should point at the same spot as the original does.

推荐答案

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

Containers are required to provide iterator as a type convertible to const_iterator, so you can convert implicitly:

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

std :: insert_iterator s是输出迭代器。这无法将它们转换为常规 Container :: iterator ,它必须是前向迭代器。

std::insert_iterators are output iterators. This gives no way to convert them to a regular Container::iterator which must be a forward iterator.

另一个插入迭代器可以允许这样的东西,但是那些从标准函数中获得的东西不会。

Another kind of insert iterator may allow such a thing, but those obtained from the standard functions don't.

我想你可以写自己的但是 std :: insert_iterator 的包装器暴露了受保护的成员 iter ,但是:

I guess you can write your own wrapper around std::insert_iterator that exposes the protected member iter, though:

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

这篇关于const_iterator的C ++迭代器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆