1. 程式人生 > >c/c++ 模板與STL小例子系列<一 >自建Array數組

c/c++ 模板與STL小例子系列<一 >自建Array數組

stl 編譯不過 header space eve fine ray size new t

c/c++ 模板與STL小例子系列<一> 自建Array數組

自建的Array數組,提供如下對外接口

方法 功能描述
Array() 無參數構造方法,構造元素個數為模板參數個的數組
Array(int length) 有參數構造方法,構造元素個數為參數length個的數組
~Array() 析構函數
int size() 返回數組中元素的個數
T& get(int num) 返回數組中指定下標的元素的引用
void set(T data, int num) 設置指定下標元素的值
T& operator [] (int num) 重載類型T的[]函數

下面代碼用使用了私有元素size1,本來想用size命名,但是因為在公有方法裏聲明了int size()方法,編譯不過去,所以起名為size1,感覺很奇怪。

my_array.h

ifndef __my_array__
#define __my_array__
template<typename T, int n>
class Array {
public:
  Array();
  Array(int length);
  ~Array();
  T& get(int idx);
  T& operator[](int idx);
  void set(T data, int idx);
  int size();
private:
  T* pt;
  int size1;

};
//構造函數
template<typename T, int n>
Array<T, n>::Array(){
  pt = new T[n];
  size1 = n;
}
//構造函數
template<typename T, int n>
Array<T, n>::Array(int length){
  pt = new T[length];
  size1 = length;
}
//析構函數
template<typename T, int n>
Array<T, n>::~Array(){
  delete [] pt;
}
//取得數組元素的個數
template<typename T, int n>
int Array<T,n>::size(){
  return size1;
}
//得到指定下標的元素
template<typename T, int n>
T& Array<T, n>::get(int num){
  if(num >= size1 || num < 0){
    //異常                                                      
  }
  else{
    return pt[num];
  }
}
//設定指定下標元素的值
template<typename T, int n>
void Array<T, n>::set(T data, int num){
  if(num >= size1 || num < 0){
    //異常                                                      
  }
  else{
    pt[num] = data;
  }
}
//重載元素類型的[]函數
template<typename T, int n>
T& Array<T, n>::operator[](int num){
  if(num >= size1 || num < 0){
    //異常                                                      
  }
  else{
    return *(pt + num);
  }
}
#endif

測試程序:

#include <iostream>
#include <string>
#include "my_array.h"

using namespace std;

int main(){
  Array<int, 5> ary;
  for(int i = 0; i < ary.size(); ++i){
    ary.set(i * 10, i);
    cout << ary.get(i) << " ";
    cout << ary[i] << ", ";
  }
  cout << endl;

  Array<string, 3> asr(4);
  for(int i = 0; i < asr.size(); ++i){
    asr.set("AAA", i);
    cout << asr.get(i) << " ";
    cout << asr[i] << ", ";
  }
  cout << endl;
  return 0;
}

c/c++ 模板與STL小例子系列<一 >自建Array數組