【发布时间】:2011-11-10 15:19:30
【问题描述】:
我非常熟悉 STL 以及如何使用它。我的问题是……
如果我要实现自己的 STL 容器类型,内部迭代器是如何定义的? STL 类往往具有顺序或随机访问迭代器、这些迭代器的 const_ 版本以及流迭代器。
这些迭代器是否在每个 STL 类中都是完全定义的,或者是否有某种基类可供您继承以获得大部分迭代器功能?有没有人知道如何实现一个支持这些不同类型迭代器的类的好参考?
【问题讨论】:
-
这取决于容器,例如只有一些容器具有随机访问迭代器。关于
const,我认为每个迭代器都有一个const版本 -
是的,我知道那部分 - 只有序列容器具有随机访问权限,关联不能,因为它会使隐式排序无效。你知道 const 版本是否是同一个迭代器,只是 typedef 吗?因为我认为它以某种方式暴露了不同的功能。
-
@wiso (Out|In)putIterators 通常不会。例如没有办法拥有
const_back_inserter。 -
@w00te: const_iterator 具有相同的功能,只是在适当的位置将
const添加到返回类型。container::const_iterator与const container::iterator不一样,所以它不仅仅是一个 typedef,但如果你从头开始编写数据结构,你通常可以编写一个模板,用于container::iterator,T作为模板参数,container::const_iterator和const T。