程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 線性表之數組---C++語言描述

線性表之數組---C++語言描述

編輯:C++入門知識

感覺用C++中的構造函數、析構函數等類的特點來描述一些數據結構更加易讀,更加合理,便捷。但有一個問題,編譯器不支持模板的分離編譯,很不舒服

 

[cpp]
#include <iostream> 
using namespace std; 
 
template<class T> 
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<class T> 
CArray<T>::CArray(const int &iMax) 

    Create(iMax); 

 
template<class T> 
CArray<T>::~CArray() 

    Destroy(); 

 
template<class T> 
void CArray<T>::Create(const int &iMax) 

    m_pArray = new T[iMax]; 
    m_max = iMax; 
    m_len = 0; 
    memset(m_pArray,0,sizeof(m_pArray)); 

 
template<class T> 
void CArray<T>::Destroy() 

    delete [] m_pArray; 

 
template<class T> 
void CArray<T>::Print() 

    if(IsEmpty()) 
    {    
        cout<<"沒有數據!"<<endl; 
    } 
    else 
    { 
        for(int ix =0 ; ix < m_len ; ++ix) 
        { 
            cout<<m_pArray[ix]<<","; 
        } 
        cout<<endl; 
    } 

 
template<class T> 
bool CArray<T>::IsEmpty() 

    if(0 == m_len) 
    { 
        return true; 
    } 
    else 
    { 
        return false; 
    } 

 
template<class T> 
bool CArray<T>::IsFull() 

    if(m_len == m_max) 
    { 
        Reset(); 
        return false; 
    } 
    else 
    { 
        return false; 
    } 

 
template<class T> 
void CArray<T>::Append(const T &data) 

    if(!IsFull()) 
    { 
        ++m_len; 
        m_pArray[m_len - 1] = data; 
    } 

 
template<class T> 
int CArray<T>::GetLength() 

    return m_len; 

 
template<class T> 
bool CArray<T>::Delete(const int &pos) 

    if(pos > m_len || pos <= 0) 
    { 
        cout<<"位置不合法"<<endl; 
        return false; 
    } 
    for(int ix = pos - 1 ; ix < m_len - 1 ; ++ ix) 
    { 
        m_pArray[ix] = m_pArray[ix + 1]; 
    } 
    --m_len; 
    return true; 

 
template<class T> 
void CArray<T>::operator+=(const T &data) 

    this->Append(data); 

 
template<class T> 
bool CArray<T>::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<class T> 
CArray<T>::CArray() 

    Create(5); 

 
template<class T> 
void CArray<T>::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<class T> 
int CArray<T>::GetMax() 

    return m_max; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved