listarray.h

来自「用bcg库编写的java IDE 源码」· C头文件 代码 · 共 211 行

H
211
字号
#include <list>
#include <algorithm>
using namespace std;


template<typename TYPE>
class CListArray
{
    list<TYPE> m_lData;
public:
	CListArray();
	CListArray(long nInitSize);
	virtual ~CListArray();

	//attributes
	void SetSize(long nNewSize,long nGrowBy = -1);
	long GetCount();
	long GetSize();
	long GetUpperBound();
	bool IsEmpty();

	//operations
	void FreeExtra();
	void RemoveAll();

	//element access
	TYPE& ElementAt(long nIndex);
	TYPE& GetAt(long nIndex);
	TYPE* GetData();
	void  SetAt(long nIndex,TYPE newItem);

	//growing array
	long Add(TYPE data);
	long Append(CListArray& arrSrc);
	void Copy(CListArray& arrSrc);
	void SetAtGrow(long nIndex, TYPE newItem);

	//insertion\removal
    void InsertAt(long nIndex,TYPE newItem,long nCount = 1);
    void InsertAt(long nStartIndex,CListArray* pNewArray);
    void RemoveAt(long nIndex,long nCount = 1);

	//operator
	TYPE& operator[](long nIndex);
};

#define MOVEITERATOR(i,itr)     \
	 itr = m_lData.begin();\
{\
	for(int iI=0; iI<i; iI++)itr++;\
}\

template<typename TYPE>
CListArray<TYPE>::CListArray()
{

}


template<typename TYPE>
CListArray<TYPE>::CListArray(long nInitSize)
{

}

template<typename TYPE>
CListArray<TYPE>::~CListArray()
{


}

template<typename TYPE>
void CListArray<TYPE>::SetSize(long nNewSize,long nGrowBy /*= -1*/)
{

}


template<typename TYPE>
long CListArray<TYPE>::GetCount()
{
   return m_lData.size();
} 


template<typename TYPE>
long CListArray<TYPE>::GetSize()
{
  return m_lData.size();
}


template<typename TYPE>
long CListArray<TYPE>::GetUpperBound()
{
  return m_lData.size();
}

template<typename TYPE>
bool CListArray<TYPE>::IsEmpty()
{
  return m_lData.empty();
}

//operations
template<typename TYPE>
void CListArray<TYPE>::FreeExtra()
{
 
}


template<typename TYPE>
void CListArray<TYPE>::RemoveAll()
{
   list<TYPE>::iterator itrStart = m_lData.begin();
   list<TYPE>::iterator itrEnd   = m_lData.end();
   m_lData.erase(itrStart,itrEnd);
}
											 
//element access
template<typename TYPE>
TYPE& CListArray<TYPE>::ElementAt(long nIndex)
{
   list<TYPE>::iterator itrIndex;     
   MOVEITERATOR(nIndex,itrIndex)
   return *itrIndex;
}

template<typename TYPE>
TYPE& CListArray<TYPE>::GetAt(long nIndex)
{
  return ElementAt(nIndex);
}


template<typename TYPE>
TYPE* CListArray<TYPE>::GetData()
{
  return (TYPE)NULL;
}

template<typename TYPE>
void  CListArray<TYPE>::SetAt(long nIndex,TYPE newItem)
{
   ASSERT(nIndex<GetCount());
   InsertAt(nIndex,newItem);
}

//growing array
template<typename TYPE>
long CListArray<TYPE>::Add(TYPE newElement)
{
  m_lData.push_back(newElement);
  return GetSize();
}

template<typename TYPE>
long CListArray<TYPE>::Append(CListArray& arrSrc)
{
  return 0;
}

template<typename TYPE>
void CListArray<TYPE>::Copy(CListArray& arrSrc)
{

}

template<typename TYPE>
void CListArray<TYPE>::SetAtGrow(long nIndex, TYPE newElement)
{

}

//insertion\removal
template<typename TYPE>
void CListArray<TYPE>::InsertAt(long nIndex,TYPE newItem,long nCount /*= 1*/)
{
   list<TYPE>::iterator itrIndex;     
   MOVEITERATOR(nIndex,itrIndex)
   
   m_lData.insert(itrIndex,nCount,newItem);
}

template<typename TYPE>
void CListArray<TYPE>::InsertAt(long nStartIndex,CListArray* pNewArray)
{
    ASSERT(pNewArray != NULL);
}

template<typename TYPE>
void CListArray<TYPE>::RemoveAt(long nIndex,long nCount /*= 1*/)
{
   list<TYPE>::iterator itrIndex;     
   MOVEITERATOR(nIndex,itrIndex)
   
   for(int I =0; I<nCount; I++)
   {
     m_lData.erase(itrIndex);
	 itrIndex--;
   }
}

//operator
template<typename TYPE>
TYPE& CListArray<TYPE>::operator[](long nIndex)
{
  return ElementAt(nIndex);
}

⌨️ 快捷键说明

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