实现基于迭代器的链表(泛型)

本文介绍了尝试使用C++实现基于迭代器的链表,并计划利用归并排序进行排序。然而,在实现sort函数的过程中遇到了困难,目前归并排序的merge函数尚未完成。作者打算在寻求专家指导后更新博客,分享解决方案。
摘要由CSDN通过智能技术生成
#include <iostream>
#include <functional>
template <class T>
class Node
{
public:
    T data;
    Node<T> *next;
    Node(T t)
    {
        data=t;
        next=NULL;
    }
};
class My_predicate
{

public:
    bool operator()(int &a)
    {
        return a>2;
    }
};

template <class T>class Forward_list
{
public:
    class iterator
    {
    public:
        iterator(Node<T>* p)
        {
            node=p;
        }
        T operator*()const
        {
            return node->data;
        }
        Node<T>* operator->()
        {
            return node;
        }
        //前置重载++,最好判断下,避免++A造成错误
        iterator& operator++()
        {
            if(node!=NULL)
                node=node->next;
            return *this;
        }
        //后置重载++,不能返回局部变量引用
        iterator operator++(int)
        {
            iterator ite = *this;
            ++(*this);
            return ite;
        }
        bool operator!=(const iterator p)
        {
            return node!=p.node;
        }
    private:
        Node<T> *node;
    };
    Forward_list();
    iterator begin()
    {
        return iterator(head);   //返回迭代器
    }
    iterator end()
    {
        return iterator(NULL);   //返回迭代器尾,直接创建内容为空的迭代器
    }
    void push_front(Node<T>* node);//头插一个节点
    void pop_front();//删去第一个节点
    void insert_after(Node<T>* node);//尾插一个节点
    void erase_after();//删去最后一个节点
    int size();//返回节点个数
    void clear();//清空链表
    bool empty();//判断链表是否为空
    void remove(const T& value);//删除t
    template<class UnaryPredicate>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值