vector迭代器——测试end



我正在使用数组实现向量数据结构。当然,vector类为数据数组、其容量和大小提供了私有变量。

我想要一个迭代器作为内部类。迭代器实现为一个简单的int类型。++操作符必须检查它是否到达了数组的末尾。它是如何做到的呢?如果数据结构是链表,则只需检查指向下一个节点的指针是否== NULL即可。

我想到了两种解决方案,列表中的哨兵对象或指向数组大小的指针作为迭代器内部类的私有变量。两种解决方案似乎都不令人满意。我的问题是,这通常是怎么做的?

class Vector
{
  public
   ...
private:
   int size;
   int capacity;
   <T> array[];
  class iterator
 { 
        public
   bool isLast()
private:
       int position
   }

}

我的问题是这通常是怎么做的?

通常的做法与你正在做的完全不同。

在c++标准vector类中,这通常是通过一个简单的指针完成的。通过将它与vector的end迭代器进行比较来检查它是否在末尾,end迭代器也包含(或就是)一个指针。如果没有另一个迭代器与之比较,迭代器就无法检查自己的位置。
if (it == v.end())

如果迭代器不是指针的简单类型定义,则迭代器的重载比较操作符将简单地将操作转发给底层指针,除非它包含某种用于调试目的的代码。比较来自不同vector的迭代器会导致未定义行为。

如果你想要一个迭代器可以在没有其他迭代器帮助的情况下验证自己的位置,那么你的问题不应该是它通常是如何完成的,因为它通常是如何完成的,不允许这个特性。一种选择是存储指向所属向量的指针以及整数位置。然后你可以用:

检查它是否在末尾
if (position == vector_ptr->size())

迭代器构造函数将vector的size作为参数,并根据它检查当前位置。

你的代码示例不是有效的c++。如果这不是一个练习,可以考虑使用std::vector

最新更新