我正在使用数组实现矢量数据结构。当然,向量类具有数据数组的私有变量,其容量和大小。
我想要一个迭代器作为内部类。迭代器实现为一个简单的int。 ++运算符必须检查它是否已到达数组的末尾。它是如何做到的? 如果数据结构是链表,那么检查指向下一个节点的指针== NULL就是一个简单的问题。
我想到了两个解决方案,列表中的sentinel objet或指向数组大小的指针作为迭代器内部类的私有变量。两种解决方案都不令人满意我的问题是这通常是怎么做的?
class Vector
{
public
...
private:
int size;
int capacity;
<T> array[];
class iterator
{
public
bool isLast()
private:
int position
}
}
答案 0 :(得分:3)
我的问题是这通常是怎么做的?
它通常如何完成与你正在做的事情完全不同的方法。
在C ++标准向量类中,通常使用简单的指针来完成。你可以通过将它与向量的结束迭代器进行比较来检查它是否在最后,它还包含(或者是)一个指针。如果没有另一个迭代器来比较它,迭代器就无法检查它的位置。
if (it == v.end())
如果迭代器不仅仅是指针的typedef,迭代器的重载比较运算符将简单地将操作转发给底层指针,除非它包含某种代码用于调试目的。比较来自不同向量的迭代器会导致未定义的行为。
如果你想要一个可以在没有其他迭代器帮助的情况下验证自己位置的迭代器,那么你的问题不应该是它通常如何完成,因为它通常如何完成不允许该功能。一个选项是存储指向拥有向量的指针以及整数位置。然后你可以检查它是否在最后:
if (position == vector_ptr->size())
答案 1 :(得分:1)
迭代器构造函数将把矢量大小作为参数,并检查它的当前位置。
您的代码示例无效C ++。如果这不是练习,请考虑使用std::vector