迭代器和指针有什么关系?

新手上路,请多包涵

带有迭代器的代码看起来很像带有指针的代码。迭代器是一些晦涩的类型(例如 std::vector<int>::iterator )。

我没有得到的是迭代器和指针是如何相互关联的——迭代器是指针周围的包装器,具有重载操作以前进到相邻元素还是别的什么?

原文由 sharptooth 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 867
2 个回答

迭代器是指针的泛化。

迭代器(取决于变体)必须实现 \* 和 ++

所以指针是一个迭代器。但不一定反过来。

如果你想迭代一个复杂的结构(一棵树,一个图……),迭代器将不仅仅是一个指针,并且不会对 ram 中的某个实际位置进行任何引用。

原文由 Tristram Gräbener 发布,翻译遵循 CC BY-SA 2.5 许可协议

迭代器是重载某些运算符的对象,因此用法看起来就像是指针。这在给定迭代器类别的能力范围内。随机访问迭代器看起来完全像指针,其他类型的迭代器不提供某些操作(例如 list<X>::iterator 它是双向的,没有运算符 += 以及许多其他需要随机访问的)。

至于“晦涩的名称”,将普通指针用于迭代器并非完全不可想象:

  template <class T>
 class MyContainer
 {
     ...
     typedef T* iterator;
 }

 MyContainer<int>::iterator it; //the type is really int*

原文由 UncleBens 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题