c/c++ 模板与STL小例子系列<一 >自建Array数组
程序员文章站
2022-07-05 14:32:26
c/c++ 模板与STL小例子系列 自建Array数组 自建的Array数组,提供如下对外接口 | 方法 | 功能描述 | | | | | Array() | 无参数构造方法,构造元素个数为模板参数个的数组 | | Array(int length) | 有参数构造方法,构造元素个数为参数lengt ......
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; }
上一篇: python 单例模式
下一篇: 宽字节UTF-8、多字节互转