C++言語実装リニアテーブルの配列例

3350 ワード

この例では,C++言語実装線形テーブルの配列について述べる.皆さんの参考にしてください.具体的な分析は以下の通りである.
C++の中の構造関数、構造関数などのクラスの特徴でいくつかのデータ構造を説明するのはもっと読みやすくて、もっと合理的で、便利だと感じます.しかし、コンパイラがテンプレートの分離コンパイルをサポートしていないという問題があり、気分が悪いです.

#include 
using namespace std;
template
class CArray
{
public:
 CArray(const int &iMax);
 CArray();
 ~CArray();
 void Create(const int &iMax);
 void Destroy();
 void Print();
 bool IsEmpty();
 bool IsFull();
 void Append(const T &data);
 int GetLength();
 int GetMax();
 bool Delete(const int &pos);
 bool Insert(const int &pos,const T &data);
 void operator+=(const T &data);
private:
 T *m_pArray;
 int m_len;
 int m_max;
 void Reset();
};
template
CArray::CArray(const int &iMax)
{
 Create(iMax);
}
template
CArray::~CArray()
{
 Destroy();
}
template
void CArray::Create(const int &iMax)
{
 m_pArray = new T[iMax];
 m_max = iMax;
 m_len = 0;
 memset(m_pArray,0,sizeof(m_pArray));
}
template
void CArray::Destroy()
{
 delete [] m_pArray;
}
template
void CArray::Print()
{
 if(IsEmpty())
 { 
  cout<
bool CArray::IsEmpty()
{
 if(0 == m_len)
 {
  return true;
 }
 else
 {
  return false;
 }
}
template
bool CArray::IsFull()
{
 if(m_len == m_max)
 {
  Reset();
  return false;
 }
 else
 {
  return false;
 }
}
template
void CArray::Append(const T &data)
{
 if(!IsFull())
 {
  ++m_len;
  m_pArray[m_len - 1] = data;
 }
}
template
int CArray::GetLength()
{
 return m_len;
}
template
bool CArray::Delete(const int &pos)
{
 if(pos > m_len || pos <= 0)
 {
  cout<
void CArray::operator+=(const T &data)
{
 this->Append(data);
}
template
bool CArray::Insert(const int &pos,const T &data)
{
 if(IsFull())
 {
  return false;
 }
 else
 {
  for(int ix = m_len - 1 ; ix >= pos - 1 ; -- ix)
  {
   m_pArray[ix + 1] = m_pArray[ix];  
  }
  m_pArray[pos - 1] = data;
  ++m_len;
  return true;
 }
}
template
CArray::CArray()
{
 Create(5);
}
template
void CArray::Reset()
{
 T *pT = new T[m_max * 2];
 memset(pT,0,sizeof(pT));
 for(int ix = 0 ; ix < m_len ; ++ ix)
 {
  pT[ix] = m_pArray[ix];
 }
 delete [] m_pArray;
 
 m_pArray = pT;
 m_max = m_max * 2;
}
template
int CArray::GetMax()
{
 return m_max;
}

本稿で述べたことが皆さんのC++プログラム設計に役立つことを願っています.