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数组的更多相关文章

  1. c/c++ 模板与STL小例子系列<三> traits

    c/c++ 模板与STL小例子系列 traits 对这个概念,还是处于懵逼的状态,初步体会就是,为了解决类型之间的转换问题. 从一个类型为A的指针,转化到类型为B的指针,中间需要用void*来作为中介 ...

  2. c/c++ 模板与STL小例子系列<二> 模板类与友元函数

    c/c++ 模板与STL小例子系列 模板类与友元函数 比如某个类是个模板类D,有个需求是需要重载D的operator<<函数,这时就需要用到友元. 实现这样的友元需要3个必要步骤 1,在模 ...

  3. 【JavaScript数据结构系列】01-数组Array

    [JavaScript数据结构系列]01-数组Array 码路工人 CoderMonkey 转载请注明作者与出处 # [JavaScript数据结构系列] # 01-数组Array 数组: 是有序的元 ...

  4. HDU 4520 小Q系列故事――最佳裁判(STL)

    小Q系列故事——最佳裁判 Problem Description 过去的2012年对小Q来说是很悲催的一年,失恋了12次,每次都要郁闷1个来月. 好在小Q是个体育迷,在最痛苦的时候,他常常用观看各种体 ...

  5. STL学习系列之一——标准模板库STL介绍

    库是一系列程序组件的集合,他们可以在不同的程序中重复使用.C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出.数学计算等功能. 1. STL介绍 标准模板库STL是当今每 ...

  6. C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...

  7. C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇.主要针对线性表中的链表 ST ...

  8. backbone入门小例子

    最近听了个backbone的分享,为了避免听不懂,就先做了个小例子 例子很简单,效果如下 基本视图模板: <script type="tex/template" id=&qu ...

  9. Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期

    学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看 ...

随机推荐

  1. Apache Flink 漫谈系列 - JOIN 算子

    聊什么 在<Apache Flink 漫谈系列 - SQL概览>中我们介绍了JOIN算子的语义和基本的使用方式,介绍过程中大家发现Apache Flink在语法语义上是遵循ANSI-SQL ...

  2. ES6 系列之我们来聊聊装饰器

    Decorator 装饰器主要用于: 装饰类 装饰方法或属性 装饰类 @annotation class MyClass { } function annotation(target) { targe ...

  3. Ubuntu 安装网卡驱动

    搭建Linux平台的无线热点,需要无线网卡和驱动都要支持 AP. 试了下Ubuntu平台默认驱动并不支持AP模式,所以需要更换驱动,具体操作步骤如下: 1.找到自己网卡芯片的型号,由于我的环境是搭建在 ...

  4. 【前端框架系列】浅谈当前基于bootstrap框架的几种主流前端框架

    一  概述 当新开发一个项目或产品时,技术选型是一个不可缺少的环节,在软件架构中有着举足轻重的作用,可以这么说,技术选型的好坏直接影响项目或产品的成败优劣,因此,在进行软件架构时,一定要想好技术选型. ...

  5. #19 re&jieba模块

    前言 在Python中,需要对字符串进行大量的操作,有时需要从一个字符串中提取到特定的信息,用切片肯定是不行的,所有这一节记录两个强大的文本处理模块,一个是正则表达式re模块,另一个是中文处理模块ji ...

  6. 使用Task异步执行方法_多线程_应用程序池

    偶然遇到在执行登录的方法需要发送消息队列导致登录时间过长的问题,从网上查了一些方法,先将一个简单的异步处理程序的小例子展示出来,供大家参考: 备注:该方法是从应用程序程序所在的线程池中获取线程,第一次 ...

  7. 【Java每日一题】20170303

    20170302问题解析请点击今日问题下方的“[Java每日一题]20170303”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...

  8. Hibernate(十三)迫切内连接fetch

    迫切内连接fetch 内连接和迫切内连接的区别: 其主要区别就在于封装数据,因为他们查询的结果集都是一样的,生成底层的SQL语句也是一样的. 1.内连接:发送就是内连接的语句,封装的时候将属于各自对象 ...

  9. 关于openSetting通过tap的调用

    问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本 API和组件 小程序 Bug openSetting 工具 6.7.2 2.3.0 - 当前 Bug 的表现(可附上截图 ...

  10. angular 拼接html 事件无效

    主要是要引用$compile方法