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 + -
显示快捷键?