亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sarray.hpp

?? 如果在您的軟件中需要輸出報表
?? HPP
字號:
// SArray.h: interface for the CSArray class.
//	模塊名稱:啟程動態數組C++模板類
//  說明:本代碼提供對動態數組的支持,在內存中程序將數據分塊存放,
// 避免了大塊內存的申請,同時也和普通的雙向鏈表不同的是本代碼提供
// 了對內部數據的快速索引,大大提高了數據訪問速度。
//	本代碼可以任意使用、修改、傳播。
//	黃建雄 huangjianxiong@sina.com
// 						2003-09-25
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SARRAY_H__B1D40C22_2698_4202_921E_36D447EA4199__INCLUDED_)
#define AFX_SARRAY_H__B1D40C22_2698_4202_921E_36D447EA4199__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef ASSERT
#define ASSERT(a) void()
#endif

#ifndef BOOL
#define BOOL int
#endif


template<class T>
class CSArray  
{
	typedef struct _SARRAYNODE{
		struct _SARRAYNODE *	prenode;	//前一節點
		T				   *	data;		//存儲實際數據數組的數據塊的指針	
		struct _SARRAYNODE *	nextnode;	//后一節點
	}SARRAYNODE;

public:
	CSArray(int nGrowBy=5){
		m_pCurNode=m_pHeadNode=m_pTailNode=NULL;
		m_nCurIndex=-1;
		m_nCount=0;
		m_nGrowBy=nGrowBy;
	}

	virtual ~CSArray(){Free();}

	//******************************************
	//	name:Add
	//	function:添加數據
	//	input: T newElement-新數據
	//  return: 數據索引號
	//	remark: 
	//******************************************
	int Add(T newElement)
	{
		SARRAYNODE *temp=NULL;
		int		  offset=0;
		if(m_nGrowBy==0)//
			return -1;
		if(m_pHeadNode==NULL)
		{
			m_pHeadNode=new SARRAYNODE;
			m_pHeadNode->prenode=m_pHeadNode->nextnode=NULL;
			m_pHeadNode->data=new T[m_nGrowBy];
			if(m_pHeadNode->data==NULL)
				return -1;
			*m_pHeadNode->data=newElement;
			m_nCurIndex=0;
			m_nCount++;
			m_pCurNode=m_pTailNode=m_pHeadNode;
		}
		else
		{
			if(m_nCount%m_nGrowBy==0)
			{
				temp=new SARRAYNODE;
				if(temp==NULL)
					return 0;
				temp->nextnode=NULL;
				temp->prenode=m_pTailNode;
				temp->data=new T[m_nGrowBy];
				if(temp->data==NULL)
					return 0;
				*temp->data=newElement;
				m_pTailNode->nextnode=temp;
				m_pTailNode=temp;
				m_pCurNode=temp;
			}
			else
			{
				*(m_pTailNode->data+m_nCount%m_nGrowBy)=newElement;
				m_pCurNode=m_pTailNode;
			}
			m_nCount++;
			m_nCurIndex=m_nCount-1;
		}
		return m_nCurIndex;
	}

	//******************************************
	//	name:AddBatch
	//	function:批量添加數據
	//	input: T *pElement-源數組指針
	//			int count-數組大小
	//  return: BOOL TRUE-成功;FALSE-失敗
	//	remark: 
	//******************************************
	BOOL AddBatch(T *pElement,int count)
	{
		for(int i=0;i<count;i++)
			if(Add(pElement[i])==-1)
				return FALSE;
			return TRUE;
	}


	//******************************************
	//	name:Copy
	//	function:數據復制
	//	input: CSArray & src-源動態數組
	//  return: 
	//	remark: 使用前請先確保兩個對象有相同的數據類型
	//******************************************
	void Copy(CSArray &src )
	{
		T *pt;
		RemoveAll();
		int size=src.GetSize();
		SetSize(size);
		for(int i=0;i<m_nCount;i++)
		{
			pt=src.GetPtAt(i);
			SetAt(*pt,i);
		}
	}

	//******************************************
	//	name:GetAt
	//	function:獲取數組指定位置的數據
	//	input: int index-指定位置
	//  return: T 數據
	//	remark: 
	//******************************************
	T GetAt(int index){
		int			   offset=0;
		SARRAYNODE      *temp=NULL;
		ASSERT(index>=0&&index<m_nCount);
		temp=GetDestSegEntry(index);
		m_pCurNode=temp;
		m_nCurIndex=index;
		return ((T *)temp->data)[index%m_nGrowBy];
	}
	
	//******************************************
	//	name:GetPtAt
	//	function:獲取數組指定位置的數據的指針
	//	input: int index-指定位置
	//  return: T 數據
	//	remark: 提供對內部數據的直接訪問,小心使用!!
	//******************************************
	T *GetPtAt(int index){
		int			   offset=0;
		SARRAYNODE      *temp=NULL;
		ASSERT(index>=0&&index<m_nCount);
		temp=GetDestSegEntry(index);
		m_pCurNode=temp;
		m_nCurIndex=index;
		return ((T *)temp->data)+index%m_nGrowBy;
	}
	
	T operator[](int index){ return GetAt(index);}
	
	//******************************************
	//	name:GetSize
	//	function:獲取數組的數據容量
	//	input: 
	//  return: int 數據容量
	//	remark: 
	//******************************************
	int GetSize(){return m_nCount;}

	//******************************************
	//	name:SetAt
	//	function:修改數組指定位置的數據
	//	input: T newElement-新數據
	//			int index-指定索引號
	//  return: BOOL TURE-成功;FALSE-失敗
	//	remark: 
	//******************************************
	BOOL SetAt(int index,T &newElement)
	{
		int			   offset=0;
		SARRAYNODE      *temp=NULL;
		if(index<0||index>m_nCount-1)
			return FALSE;
		temp=GetDestSegEntry(index);
		m_pCurNode=temp;
		*(m_pCurNode->data+index%m_nGrowBy)=newElement;
		m_nCurIndex=index;
		return TRUE;
	}

	//******************************************
	//	name:InsertAt
	//	function:在數組指定位置插入一個新數據
	//	input: int index-指定索引號
	//			T newElement-待插入的數據
	//  return: BOOL TURE-成功;FALSE-失敗
	//	remark: 本接口關系到大量數據的遷移,不推薦大量使用
	//			算法還有待進一步優化
	//******************************************
	BOOL InsertAt(int index,T newElement){
		if(index<0||index>m_nCount)
			return FALSE;
		else if(index==m_nCount)
			return Add(newElement);
		else
		{
			T t;
			Add(newElement);//enlarge buffer by one space
			for(int i=m_nCount-1;i>index;i--)
			{
				t=GetAt(i-1);
				SetAt(t,i);
			}
			SetAt(newElement,i);
			return TRUE;
		}
	}

	//******************************************
	//	name:RemoveAt
	//	function:刪除數組中指定索引號中包含的數據
	//	input: int index-指定索引號
	//  return: BOOL TURE-成功;FALSE-失敗
	//	remark: 本接口關系到大量數據的遷移,不推薦大量使用
	//			算法還有待進一步優化
	//******************************************
	BOOL RemoveAt(int index){
		SARRAYNODE *temp=NULL;
		T t;
		if(index<0||index>m_nCount)
			return FALSE;
		for(int i=index;i<m_nCount-1;i++)
		{
			t=GetAt(i+1);
			SetAt(t,i);
		}
		m_nCurIndex=0;
		m_pCurNode=m_pHeadNode;
		m_nCount--;
		if(m_nCount%m_nGrowBy==0)
		{
			temp=m_pTailNode;
			m_pTailNode=m_pTailNode->prenode;
			if(temp->data)
				delete []temp->data;
			delete (temp);
			if(m_pTailNode==NULL)
				m_pHeadNode=m_pCurNode=NULL;
			else
				m_pTailNode->nextnode=NULL;
		}
		return TRUE;
	}

	//******************************************
	//	name:SetGrowBy()
	//	function:設置數據增長幅度
	//	input: 
	//  return: 
	//	remark: 在初始化時使用
	//******************************************
	void SetGrowBy(int nGrowBy)
	{
		m_nGrowBy=nGrowBy;
	}

	//******************************************
	//	name:RemoveAll()
	//	function:清空對象中的數據
	//	input: 
	//  return: BOOL TURE-成功;FALSE-失敗
	//	remark:
	//******************************************
	BOOL RemoveAll(){
		if(m_pHeadNode==NULL)
			return TRUE;
		Free();
		m_pCurNode=m_pHeadNode=m_pTailNode=NULL;
		m_nCurIndex=-1;
		m_nCount=0;
		return TRUE;
	}

	//******************************************
	//	name:SetSize()
	//	function:設置數據的容量
	//	input: int size -數據的容量
	//  return: BOOL TURE-成功;FALSE-失敗
	//	remark:只允許擴大容量
	//******************************************
	BOOL SetSize(int size){
		SARRAYNODE *temp=NULL;
		int       oldsegs=0,newsegs=0;
		if(m_nCount>=size)
			return 0;
		oldsegs=(m_nCount+m_nGrowBy-1)/m_nGrowBy;
		newsegs=(size+m_nGrowBy-1)/m_nGrowBy;
		for(int i=oldsegs;i<newsegs;i++)
		{
			temp=new SARRAYNODE;
			if(temp==NULL)
				return FALSE;
			temp->prenode=m_pTailNode;
			temp->nextnode=NULL;
			temp->data=new T[m_nGrowBy];
			if(temp->data==NULL)
				return FALSE;
			if(m_pHeadNode!=NULL)
			{
				m_pTailNode->nextnode=temp;
				m_pTailNode=temp;
			}
			else
			{
				m_pCurNode=m_pHeadNode=m_pTailNode=temp;
			}
		}
		m_nCount=size;
		//黃建雄 2003-7-27 修復潛在錯誤
		if(m_nCurIndex==-1) m_nCurIndex=0;
		return TRUE;
	}
	
protected:
	//******************************************
	//	name:GetDestSegEntry()
	//  function:獲取數據所在鏈表的節點指針
	//	input:	int index -數據索引
	//  return: SARRAYNODE * -數據所在鏈表的節點指針
	//	remark:內部使用,
	//******************************************
	SARRAYNODE * GetDestSegEntry(int index)
	{
		SARRAYNODE * ret=NULL;
		int		   i=0;
		if(index<m_nCurIndex/m_nGrowBy*m_nGrowBy)// dest data is in before cur data segment 
		{
			if(m_nCurIndex/m_nGrowBy<2*(index/m_nGrowBy))
				//find the seg from head;
			{
				ret=m_pHeadNode;
				for(i=0;i<index/m_nGrowBy;i++)
					ret=ret->nextnode;
			}
			else	//find the seg from cur seg;
			{
				ret=m_pCurNode;
				for(i=m_nCurIndex/m_nGrowBy;i>index/m_nGrowBy;i--)
					ret=ret->prenode;
			}
		}
		else if(index<(m_nCurIndex/m_nGrowBy+1)*m_nGrowBy)//in cur data seg
		{
			ret=m_pCurNode;
		}
		else		//after cur data seg;
		{
			if((m_nCount-1)/m_nGrowBy+m_nCurIndex/m_nGrowBy>2*(index/m_nGrowBy))
				//find the seg from cur;
			{
				ret=m_pCurNode;
				for(i=m_nCurIndex/m_nGrowBy;i<index/m_nGrowBy;i++)
					ret=ret->nextnode;
			}
			else	//find the seg form tail;
			{
				ret=m_pTailNode;
				for(i=(m_nCount-1)/m_nGrowBy;i>index/m_nGrowBy;i--)
					ret=ret->prenode;
			}
		}
		return ret;
	}

	//******************************************
	//	name:Free()
	//	function:釋放對象占用的空間,
	//	input:
	//  return:void
	//	remark:內部使用,外部要清空對象請使用RemoveAll()接口
	//******************************************
	virtual void Free()
	{
		SARRAYNODE *temp1,*temp2;
		temp1=m_pHeadNode;
		while(temp1!=NULL)
		{
			temp2=temp1->nextnode;
			if(temp1->data!=NULL)
				delete []temp1->data;
			delete (temp1);
			temp1=temp2;
		}
	}
private:
	
	int m_nCount;		//數組對象包括的數據數
	int m_nCurIndex;	//當前的索引號
	int m_nGrowBy;		//每次增長的尺寸
	SARRAYNODE * m_pCurNode;	//鏈表中當前節點的指針,在數據檢索時確定從向個方向搜索
	SARRAYNODE * m_pHeadNode;	//頭節點
	SARRAYNODE * m_pTailNode;	//尾結點
};

#endif // !defined(AFX_SARRAY_H__B1D40C22_2698_4202_921E_36D447EA4199__INCLUDED_)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美视频一区二区| 欧美伦理电影网| 久久精品国产免费看久久精品| 亚洲精品成人少妇| 亚洲欧美日韩国产一区二区三区 | 色94色欧美sute亚洲线路一ni| 国产精品99久久久久久久女警| 国产精品资源网| 国产一区啦啦啦在线观看| 国产乱子伦视频一区二区三区| 国产精品中文字幕日韩精品| 国产精品2024| 91影院在线免费观看| 91影院在线观看| 欧美男人的天堂一二区| 7777女厕盗摄久久久| 欧美精品一区二| 国产精品久久久久久户外露出| 国产精品乱码一区二三区小蝌蚪| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 亚洲色图制服丝袜| 日本成人在线看| 国产成人久久精品77777最新版本| 成人一区二区视频| 日本高清不卡一区| 日韩欧美一二区| 欧美韩国日本不卡| 亚洲一区二区在线视频| 久久99国产精品久久99果冻传媒| 成人免费毛片高清视频| 欧美人与性动xxxx| 欧美国产成人精品| 午夜精品在线视频一区| 国产麻豆成人传媒免费观看| 欧美专区在线观看一区| 久久女同精品一区二区| 亚洲午夜成aⅴ人片| 国产福利91精品一区二区三区| 一本一道久久a久久精品| 日韩精品一区二区三区视频| 成人欧美一区二区三区黑人麻豆| 免费观看在线综合色| 99精品国产热久久91蜜凸| 91精品久久久久久蜜臀| 亚洲精品国产精华液| 久久99国产精品久久99果冻传媒| 一本久道久久综合中文字幕| 久久综合久久99| 亚洲va在线va天堂| 99久久精品情趣| 久久久久久免费网| 美女高潮久久久| 欧美日韩情趣电影| 中文字幕一区二区三区av| 久久69国产一区二区蜜臀| 色噜噜狠狠一区二区三区果冻| 久久午夜老司机| 另类人妖一区二区av| 欧美视频一二三区| 一区二区三区精品视频| 国产aⅴ综合色| 精品国产自在久精品国产| 亚洲bt欧美bt精品| 欧美主播一区二区三区美女| 亚洲日本一区二区| 91麻豆123| 亚洲另类在线视频| 91亚洲精品久久久蜜桃| 国产精品嫩草99a| 国产成人啪午夜精品网站男同| 欧美成人艳星乳罩| 精久久久久久久久久久| 精品乱人伦一区二区三区| 蜜桃视频在线观看一区二区| 欧美一区二区三区系列电影| 亚洲成人免费电影| 欧美日本一区二区三区| 日韩极品在线观看| 91麻豆精品国产91久久久资源速度| 一区二区三区**美女毛片| 91久久香蕉国产日韩欧美9色| 亚洲欧美日韩久久| 欧美日韩1234| 琪琪久久久久日韩精品| 2017欧美狠狠色| 国产成人在线免费| 亚洲欧美一区二区不卡| 欧洲色大大久久| 日韩精品91亚洲二区在线观看| 欧美一级xxx| 国产美女av一区二区三区| 国产日韩欧美精品电影三级在线| 国产成人久久精品77777最新版本| 中文字幕精品一区二区精品绿巨人| a美女胸又www黄视频久久| 亚洲综合免费观看高清在线观看| 欧美日本在线观看| 国产精品一区二区无线| 国产精品福利一区二区三区| 欧美最新大片在线看| 美女性感视频久久| 国产精品蜜臀在线观看| 欧美日韩视频在线第一区 | 高清不卡一二三区| 亚洲天堂网中文字| 9191成人精品久久| 国产高清视频一区| 亚洲最新在线观看| 精品国产一区二区三区av性色| 菠萝蜜视频在线观看一区| 亚洲一区二区三区在线播放 | 韩国午夜理伦三级不卡影院| 国产欧美日韩精品a在线观看| 一本大道久久a久久综合婷婷| 天堂久久久久va久久久久| 久久综合精品国产一区二区三区| 色综合天天综合狠狠| 美女视频黄a大片欧美| 亚洲久草在线视频| 精品捆绑美女sm三区| 欧美日韩一级二级| 波多野结衣中文一区| 久久国产精品区| 一区二区不卡在线播放| 国产日本欧美一区二区| 欧美日本一区二区三区四区| 91原创在线视频| 国产成人精品亚洲午夜麻豆| 日韩中文字幕亚洲一区二区va在线 | **欧美大码日韩| 日韩欧美一区二区视频| 一本色道久久综合亚洲精品按摩| 精品一区二区av| 日韩电影一二三区| 亚洲免费在线看| 日本一区免费视频| 久久精品欧美日韩精品| 日韩亚洲欧美一区二区三区| 欧美系列在线观看| 色婷婷综合视频在线观看| 国产成a人亚洲精| 国产一区二区美女诱惑| 免费在线观看不卡| 美女精品一区二区| 日日噜噜夜夜狠狠视频欧美人| 亚洲宅男天堂在线观看无病毒| 国产精品乱码一区二区三区软件| 26uuu成人网一区二区三区| 欧美一级夜夜爽| 日韩欧美一区二区视频| 91精品一区二区三区在线观看| 欧美性猛交一区二区三区精品| 一本色道a无线码一区v| 99视频热这里只有精品免费| 成人黄色软件下载| 成人app网站| jlzzjlzz亚洲女人18| 91网站在线观看视频| 成人av片在线观看| 色婷婷综合久久| 色综合久久天天| 欧美日韩精品免费| 欧美撒尿777hd撒尿| 欧美精品久久99久久在免费线| 制服.丝袜.亚洲.另类.中文 | 国产精品一区二区久久精品爱涩| 麻豆专区一区二区三区四区五区| 久久99久久久久| 高清国产一区二区三区| 成人妖精视频yjsp地址| 99精品偷自拍| 欧美日韩精品一区二区三区蜜桃| 91精品午夜视频| 久久日一线二线三线suv| 国产女主播一区| 亚洲欧美视频在线观看| 亚洲成人一区在线| 免费高清在线一区| 国产精品影音先锋| 成人av午夜影院| 91精品免费观看| 国产日韩欧美制服另类| 亚洲品质自拍视频| 免费日本视频一区| 成人黄动漫网站免费app| 在线观看亚洲精品视频| 欧美va日韩va| 中文字幕亚洲欧美在线不卡| 午夜精品久久久久久久久| 国产精品资源站在线| 欧美在线影院一区二区| 欧美精品一区二区三区在线| 亚洲免费看黄网站| 国产资源在线一区| 91福利视频在线| 2023国产一二三区日本精品2022| 亚洲乱码国产乱码精品精的特点| 日韩高清一区在线| 一本久久a久久精品亚洲| 精品国产欧美一区二区|