补充线性表数组实现的迭代器部分
知识点:
typedef是C语言中的一个关键字,它的主要作用是为一种数据类型定义一个新的名字(别名)。
在 C++ 的 STL(Standard Template Library)中,迭代器是连接容器和算法的桥梁。根据迭代器的功能和特性,STL 将迭代器分为以下五种类别:
-
输入迭代器(Input Iterator):只读,支持单向遍历。
-
输出迭代器(Output Iterator):只写,支持单向遍历并写入元素。
-
前向迭代器(Forward Iterator):支持单向遍历,并允许多次遍历同一序列(即支持多次读取)。
-
双向迭代器(Bidirectional Iterator):支持双向遍历,即可以向前也可以向后逐个遍历元素。
-
随机访问迭代器(Random Access Iterator):支持在常数时间内访问序列中的任意元素,并提供了丰富的算术运算能力。
ptrdiff_t
类型变量通常用来保存两个指针减法操作的结果。
代码:
template<typename T>
class iterator
{
public:
typedef bidirectional_iterator_tag iterator_category;
typedef T value_type;
typedef ptrdiff_t difference_type;
typedef T* pointer;
typedef T& reference;
iterator(T* thePosition = 0)
{
position = thePosition;
}
T& operator*() const
{
return *position;
}
T* operator->() const
{
return &*position;
}
iterator& operator++()
{
++position;
return *this;
}
iterator operator++(int)
{
auto old = *this;
++position;
return old;
}
iterator& operator--()
{
--position;
return *this;
}
iterator operator--(int)
{
auto old = *this;
--position;
return old;
}
bool operator!=(const iterator right) const
{
return position != right.position;
}
bool operator==(const iterator right) const
{
return position == right.position;
}
protected:
T* position;
};
在类arrayList中增加下面两个pubilc函数:
class iterator;
iterator begin()
{
return iterator(m_pElement);
}
iterator end()
{
return iterator(m_pElement + m_iListSize);
}