C++ 迭代器到 const_iterator

标签 c++ stl iterator containers 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_iterators 是输出迭代器。这无法将它们转换为必须是前向迭代器的常规 Container::iterator

另一种插入迭代器可能允许这样的事情,但从标准函数获得的那些不允许。

我猜你可以在 std::insert_iterator 周围编写自己的包装器,它会暴露 protected 成员 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();

关于C++ 迭代器到 const_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7759246/

相关文章:

Java集合二分查找: The method binarySearch in the type Collections is not applicable for the arguments

c++ - 如何正确配置cmake文件为nlohmann_json构建一个简单的hello world?

c++ - 生成具有迭代器行为的仿函数

c++ - 移位寄存器74HC595输出电流

c++ - vector 缓冲区的 vector c++

c++ - 为什么 istream_iterator<unsigned char, unsigned char> 抛出 std::bad_cast?

scala - 在 Scala 2.8 中,为什么 Iterator 有 contains 方法而 Iterable 没有?

c++ - 操作 wchar 时遇到问题

c++ - std::list 中的 rbegin() 永远不等于指向列表的迭代器?