#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;

template <typename T, int capacity>

class Array

{
  public:     
    Array(); 
    ~Array();
    bool empty();
    void push(T value);
    T pop();
    int size();
    T& operator[] (int index);

private:
    T* elements; 
    int num;
};

class ArrayException

{

public: 
       ArrayException(const char *msg);
       const char *what() const;
  private:
       const char *message;
};

template <typename T, int capacity>
Array<T,capacity>::Array(){
 num = 0;
    elements = new T[capacity];
}

template <typename T, int capacity>                     
Array<T,capacity>::~Array(){
    delete [] elements;
}

template <typename T, int capacity>                  
bool Array<T,capacity>::empty(){
    if(num==0) return true;
    else return false;
}

template <typename T, int capacity>
void Array<T,capacity>::push(T value){
    if(num >= capacity) throw ArrayException("Array Full Exception");
    else {
        elements[num] = value;
        num++;
    }
}

template <typename T, int capacity>
T Array<T,capacity>::pop(){
    if(num == 0) throw ArrayException("Array Empty Exception");
    else {
        T temp = elements[num-1];
        elements[num-1] = 0;
        num--;
        return temp;
    }
}

template <typename T, int capacity>
int Array<T,capacity>::size(){
 return num;
}

template <typename T, int capacity>
T& Array<T,capacity>::operator[] (int index){
    if(index < 0 || index >= num) throw ArrayException("Out of Range Exception");
    else return elements[index];
}

ArrayException::ArrayException(const char *msg){
 message=msg;
}

const char* ArrayException::what() const{
    return message;
 
}

void test()
{
Array<int,1> intArray;

try {
    intArray.push(1);
}

catch (ArrayException ex) {
     cout << ex.what() << endl;
}

try {

cout << intArray[3] << endl;

}

catch (ArrayException ex) {

cout << ex.what() << endl;

}

try {

cout << intArray.pop() << endl;

}

catch (ArrayException ex) {

cout << ex.what() << endl;
}

}
int main(){
 
 
    Array<int,15> a;
 for (int i = 0; i <15; i++) a.push(i);
 cout<<"a.size=="<<a.size()<<endl;
 cout<<"a[0]=="<<a[0]<<endl;
 cout<<"a[a.size()-1]=="<<a[a.size()-1]<<endl;
 cout<<"a[-1]=="<<a[-1]<<endl;
 cout<<"a[a.size()]=="<<a[a.size()]<<endl;

cout << endl;
 
 return 0;
 
}

homework 15 2016 6 2 模板的更多相关文章

  1. U3D笔记11:47 2016/11/30-15:15 2016/12/19

    11:47 2016/11/30Before you can load a level you have to add it to the list of levels used in the gam ...

  2. BarTender 2016如何导出模板为pdf文件?

    最近有小伙伴来问,BarTender 2016能不能导出模板为pdf文件?这个是可以的,之前针对BarTender 10.1就介绍过一种方法了.本文,小编再针对BarTender 2016给大家讲下如 ...

  3. 12月15日下午Smarty模板函数

    1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...

  4. homework 11 2016 5 13 读入文件做输入

    #include <iostream>#include <fstream> using namespace std; int main(){ string x, y, z; c ...

  5. Bank homework 10 2016 4 25

    #include<iostream>#include<string>using namespace std;class Bank { public: Bank(string _ ...

  6. stand up meeting 1/15/2016 && work of weekend 1/16/2016~1/17/2016

    part 组员                工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云  组内对生词卡片又重新进行了讨论:准备最后的发布和整个开发的整理 ...

  7. 在Visual Studio 2015 中添加SharePoint 2016 开发模板

    前言 SharePoint 2016已经发布很久了,然而,默认安装VS2015以后,却没有SharePoint 2016的开发模板.其实问题很简单,和VS2012开发SharePoint 2013一样 ...

  8. 如何在ChemDraw 15.1 Pro中添加模板

    ChemDraw化学绘图工具为了方便用户的使用,特地开发了众多的各种类型模板.用户在绘制一些简单或复杂的化学结构式时,可以直接从ChemDraw模板库里直接调用使用,虽然ChemDraw模板非常的丰富 ...

  9. 2016 10月15日java的动手动脑

    (1) 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. 源程序: //随机数的产生 //zhanxinwu,October,15,2016 public class Recur ...

随机推荐

  1. 随便2--struct pointer

    同为struct,如果struct中没有指针, C 和C++可以用等号赋值,但是一旦里面涉及到指针,就不能用等号,要用memcpy struct A{char v1[20];int v2;} a,b; ...

  2. 手把手教你接口自动化测试 – SoapUI & Groovy

    手把手教你接口自动化测试 – SoapUI & Groovy http://www.cnblogs.com/wade-xu/p/4236295.html 关键词:SoapUI接口测试,接口自动 ...

  3. Uart的Verilog建模

    开发工具:Quartus II 9.1: 仿真软件:Questa Sim 10.0c: 硬件平台:Terasic DE2-115(EP2C35F672C6): 外设:MAX3232: 3个工程文件:& ...

  4. 安卓:assets目录下的文本文件(不受R文件节制)

    try { InputStream in = getAssets().open("testAsset.txt"); byte[] buffer = new byte[1024]; ...

  5. 剑指Offer:面试题26——复制复杂的链表(java实现)

    问题描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点). 思路1: 1.先复制链表节点,并用next链接起来. 2.然后对每一个结点去修改 ...

  6. 洛谷P3383 【模板】线性筛素数

    P3383 [模板]线性筛素数 256通过 579提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 Too many or Too few lines 样例解释有问题 ...

  7. python数据类型及其常用方法

    1.整型 int 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值范围为-2**63 ...

  8. NHibernate系列文章十三:NHibernate批量更新

    摘要 对于批量插入和批量修改数据,通过设置NHibernate配置文件的BatchSize属性,可以大量减少NHibernate与数据库交互的次数. 1. Batch属性介绍 设置了BatchSize ...

  9. error C2259: 'CException' : cannot instantiate abstract class

    vc6.0编译通过,VS2008则报错 解决方法: 把CException改为CUserException

  10. MS sql server 基础知识回顾(二)-表连接和子查询

    五.表连接 当数据表中存在许多重复的冗余信息时,就要考虑将这些信息建在另一张新表中,在新表中为原表设置好外键,在进行数据查询的时候,就要使用到连接了,表连接就好像两根线,线的两端分别连接两张表的不同字 ...