Linked List template class

Here is an implementation of a list class. Lists are another way to store data. Lists have very fast inserts and deletes however iterating thru the elements in the list is not as fast as iterating thru a data vector.
None.giftemplate 
None.gif     class  ZList
ExpandedBlockStart.gif     {
InBlock.gif    public:
InBlock.gif        class ListNode;
InBlock.gif    private:
InBlock.gif        DWORD m_dwSize;
InBlock.gif        bool bValid;
InBlock.gif        
InBlock.gif        ZVector m_Offsets;
InBlock.gif    public:
InBlock.gif
InBlock.gif        T AllocItem()
ExpandedSubBlockStart.gif        {
InBlock.gif            T ret;
InBlock.gif            ret.Initialize();
InBlock.gif            push_back(ret);
InBlock.gif            return ret;
ExpandedSubBlockEnd.gif        }
InBlock.gif
InBlock.gif        
ExpandedSubBlockStart.gif        DWORD GetSize(){ return size(); }
InBlock.gif        
InBlock.gif       
InBlock.gif        DWORD size()
ExpandedSubBlockStart.gif        {
InBlock.gif            return m_dwSize;
ExpandedSubBlockEnd.gif        }
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif        inline bool IsEmpty(){ return m_pHead==NULL;}
InBlock.gif        
InBlock.gif
InBlock.gif        class  ListNode
ExpandedSubBlockStart.gif        {
InBlock.gif            friend class ZList;
InBlock.gif            
InBlock.gif        public:
InBlock.gif            
InBlock.gif
InBlock.gif            T m_Data;
InBlock.gif            ListNode* m_pNext;
InBlock.gif            ListNode* m_pPrev;
InBlock.gif        public:
InBlock.gif            inline operator T&()
ExpandedSubBlockStart.gif            {
InBlock.gif                return m_Data;
ExpandedSubBlockEnd.gif            }
InBlock.gif
ExpandedSubBlockStart.gif            ListNode(T pData) : m_pNext(0), m_pPrev(0) { m_Data = pData; }
ExpandedSubBlockStart.gif            ListNode() : m_pNext(0), m_pPrev(0){}
ExpandedSubBlockEnd.gif        };
InBlock.gif
InBlock.gif        class  Iterator
ExpandedSubBlockStart.gif        {
InBlock.gif            ListNode* m_pCurrent;
InBlock.gif            bool m_bFirst;
InBlock.gif        public:
ExpandedSubBlockStart.gif            Iterator(ListNode* pBegin) : m_pCurrent(pBegin), m_bFirst(true) {}
InBlock.gif
ExpandedSubBlockStart.gif            operator T&(){ return m_pCurrent->m_Data;}
InBlock.gif
InBlock.gif            ListNode* Next()
ExpandedSubBlockStart.gif            { 
InBlock.gif                if(m_bFirst)
ExpandedSubBlockStart.gif                { 
InBlock.gif                    m_bFirst = false
InBlock.gif                    return m_pCurrent;
ExpandedSubBlockEnd.gif       &nb%
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值