重载operator->用于STL迭代器

hay*_*sti 1 c++ iterator stl g++ map

我正在编写自己的C++ STL映射容器实现.现在我正在尝试实现迭代器.它应该允许你做类似iter-> first和iter-> second之类的事情,分别返回键/值,而iter是一个对象而不是一个指针.我想知道我应该如何重载这个?这有点令人困惑,因为我不确定返回类型应该是什么; 我认为它必须是成员第一/第二的对象.是否通常返回对包装器/接口对象的引用或类似的东西?

Lig*_*ica 6

如果你真的是指C++标准库,那么value_typea map就是a pair.一对有成员firstsecond.在a中取消引用迭代器map会给你一个pair.


Ker*_* SB 6

是的,您需要一个代理来保存相关参考.

至于类型:标准库迭代器通常取消引用某种类型value_type.对于map<K,V>,值类型是std::pair<K, V>(或更确切地说pair<key_type, mapped_type>),这是从first/ 获取/ second接口的位置.

(一斯蒂芬Lavavej的讲座介绍了MSVC++实现是如何使用相同的基础数据结构setmap;唯一的区别是,set::value_type等于set::key_type,虽然map::value_typepair<key_type, mapped_type>这样,你可以用一个简单的性状检查分辨出两者分开,但Iterator接口实际上是.相同.)