我正在阅读一本书,开始学习模板章节。我已经阅读了迭代器的章节。为了练习,我正在尝试使用模板实现一个双向链表类。下面是我的类的头文件。
template<typename T>
class list
{
private:
T* first_node;
T* last_node;
struct node_structure
{
T* previous;
T* next;
T content;
};
public:
list();
void push_back( T& item );
void push_front( T& item );
void remove( size_t index );
size_t size() const;
T& get_node( size_t index );
void clear();
~list();
};
我本可以设置两个成员:
T* begin();
T* end();
...表现得像非常基本的迭代器,但它们实际上并不是迭代器。所以,我有一个问题:
如何实现自定义迭代器类,以便与所有算术操作一起使用,并具有 begin()
、cbegin()
、end()
和 cend()
?
(我知道创建一个列表类不会像 std::list
那样高效,但我这样做只是为了练习。)
T*
实际上是一个完全有效的迭代器 :) - undefinedT*
可以作为一个类似vector
的容器的合法迭代器。但是这是一个链表,T*
作为迭代器确实不足够。我改正我的观点。 - undefined