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;
}

最新文章

  1. [POJ2104]K-th Number
  2. DOM浏览器文档模型
  3. .NET 自带的动态代理+Expression 实现AOP
  4. jQuery on(),live(),trigger()
  5. ACM题目————装箱问题
  6. 定位程序问题的方法 -- clwu
  7. DOM对象控制HTML无素——详解1
  8. Powershell ForEach-Object 循环
  9. Thread详解
  10. python的map()函数
  11. zookeeper curator选主(Leader)
  12. 区间dp之四边形不等式优化详解及证明
  13. 【原创】STM32工程新建步骤
  14. 使用HttpUtils完成Http Basic 认证
  15. Assignments---(贪心)
  16. 自学Linux Shell11.2-echo命令
  17. pandas.DataFrame.to_excel
  18. 配置MySQL 5.6的主从复制
  19. [性能测试]:关于消费类ISO8583协议脚本的开发
  20. java调试器

热门文章

  1. 菜鸟系列docker——docker镜像中(4)
  2. 始于阿里,回归社区:阿里8个项目进入CNCF云原生全景图
  3. Java基础系列--instanceof关键字
  4. SpringBoot(9) SpringBoot整合Mybaties
  5. Perl中的自增、自减
  6. anoconda包管理汇总
  7. NET(C#)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口(3)
  8. [转]如何查看oracle用户具有的权限和角色
  9. Spring Day 1
  10. [日常] nginx与负载均衡策略