自定义list

博客主要给出了链表类的思路分析,定义一个链表类,其成员包含节点和迭代器,还给出了转载来源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//思路分析: 定一个链表类,成员有 (节点,迭代器)

 

 

#include <iostream>

using namespace std;

//节点
template<typename U>
class Node
{
  public:
    Node(){pNext == NULL;}
    Node(U data):m_data(data){pNext = NULL;}
    U m_data;
    Node<U>* pNext;
};
//list  底层是链表
template <typename U>
class Mylist
{
public:

    // Mylist<int>::Myiterator iter;
    //迭代  底层是一个指针  ++ -- *
    struct Myiterator
    {


        Myiterator(Node<U> *node = NULL)
        {
            pNode = node;
        }
        Myiterator &operator++(int)
        {
            pNode= pNode->pNext;
            return *this;

        }
        bool operator !=(const Myiterator &other)
        {
            return pNode!=other.pNode;

        }
        U operator *()
        {
            return pNode->m_data;

        }
         Node<U> *pNode;
    };
    //  list<int> list; list.begin();返回的是迭代器
    //成员函数
    Myiterator begin()
    {
        Myiterator iter(m_pfrist);
        return iter;
    }
    Myiterator end()
    {
       Myiterator iter(NULL);
        return iter;
    }
     Mylist():m_ilen(0){m_pfrist =NULL;}
    void insert(U data);
    void display();

private:
    int m_ilen;
    //产生对象需要加<U>
    Node<U> *m_pfrist;
};
//插入
template<typename U>
void Mylist<U>::insert(U data)
{
    Node<U>* node= new Node<U>(data);
    if(NULL == m_pfrist)
    {
        m_pfrist=node;

    }else{

        node->pNext = m_pfrist;
        m_pfrist = node;

    }
m_ilen++;
}
//打印
template<typename U>
void Mylist<U>::display()
{
    Node<U> *node= m_pfrist;
    while(node != NULL)
    {
        cout<<node->m_data<<endl;
        node = node->pNext;

    }

}

struct STU
{
    STU(const string name="STU",float score=0.0): m_strName(name),m_fscore(score){}
    string m_strName;
    float m_fscore;

};
ostream& operator<<(ostream &os,const STU stu)
{
    os<<stu.m_strName<<" "<<stu.m_fscore<<endl;
    return os;

}
int main()
{
    Mylist<STU> stull;
   // ll.insert(88);
    stull.insert(STU("JACK",88.99));
    stull.insert(STU("ROSE",88.99));
    stull.insert(STU("Jim",33.99));
    stull.display();
    Mylist<STU>::Myiterator iter;
    iter = stull.begin();
    for(;iter!=stull.end();iter++)
    {
        cout<<*iter<<endl;

    }
}

转载于:https://www.cnblogs.com/countryboy666/p/10943318.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值