⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.h

📁 《c++ 实践之路》光盘中的源代码
💻 H
字号:
#if !defined (LIST_H)
#define LIST_H
// (c) Bartosz Milewski 2000
#include <new>
#include <cassert>

class List
{
	class Link;
	
	class Free
	{
	public:
		Free () : _p (0) {}
		~Free ();
		void Purge ();
		void * NewLink ();
		void Recycle (void * link);
	private:
		Link * _p;
	};
public:
	List ();
	~List ();
	void Add (int value);
private:
	class Link
	{
		friend class Free;
	public:
		Link (Link * pNext, int value)
			: _pNext (pNext), _value (value) {}
		Link *  Next () const { return _pNext; }
		int     GetValue () const { return _value; }
		// allocator
		void * operator new (std::size_t size)
		{
			assert (size == sizeof (Link));
			return _freeList.NewLink ();
		}
		void operator delete (void * mem)
		{
			if (mem)
				_freeList.Recycle (mem);
		}
		static void Purge () { _freeList.Purge (); }
	private:
		static    Free _freeList;
	
		int     _value;
		Link *  _pNext;
	};
public:
	class Seq
	{
	public:
		bool AtEnd () const { return _pLink == 0; }
		void Advance () { _pLink = _pLink->Next (); }
		int GetValue () const { return _pLink->GetValue (); }

	protected:
		Seq (List const & list)
			: _pLink (list.GetHead ()) {}
	private:
		Link const * _pLink; // current link
	};

	friend class Seq;
private:
	Link const * GetHead () const { return _pHead; }
	
	Link * _pHead;
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -