`
pleasetojava
  • 浏览: 703389 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Array类模板实现

阅读更多

Array类模板实现

---------------------------------------------Array.h------------------------------------------------------

#include<string>
using namespace std;

template<class DataType>
class Array
{
public:
/*
Array(int szie);
inline DataType &operator[](int index);
void changeSize(int newSize);
inline int length() const;
string err() const;
*/
Array(int size)
{
if(size<1)
{
capacity = 1;
errorCode = 1;
}
else
{
capacity = size;
errorCode = 0;
}
elements = new DataType[capacity];
}

inline DataType &operator [](int index)
{
#ifdef DEBUG_ARRAY
if(index<0||index>=capacity)
{
errorCode |=2;
return dud;
}
#endif
return elements[index];
}


void changeSize(int newSize)
{
if(newSize<1)
{
errorCode |=4;
return;
}
DataType *newArray = new DataType[newSize];
int limit = (newSize>capacity)?capacity:newSize;
for(int i = 0;i < limit;i++)
newArray[i] = elements[i];
delete[] elements;
elements = newArray;
capacity = newSize;
}


inline int length() const
{
return capacity;
}


string err() const
{
if(errorCode==0)
return "No error.\n";

string errorMessage = "";
if(errorCode&1)
{
errorMessage +="Nonpositive size passed into constructor,so\n";
errorMessage +="the capacity was set to 1 by default.\n";
}
if(errorCode&2)
{
errorMessage +="Index out of range.\n";
}
if(errorCode&4)
{
errorMessage += "Nonpositive size passed into changeSize,so\n";
errorMessage += "the size of the array was not change.\n";
}
return errorMessage;
}
private:
DataType *elements;
int capacity;
DataType dud;
int errorCode;
};

---------------------------------- 主函数(使用Array)------------------------------------------

// 各种类模板实现.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include "Array.h"
#define DEBUG_ARRAY
using namespace std;

void getElements( Array<int> &numbers);

float calcAverage( Array<int> avnums);

int _tmain(int argc, _TCHAR* argv[])
{
Array<int> nums(2);
getElements(nums);
float average = calcAverage(nums);
cout<<"The average is:"<<average<<endl;
cout<<endl;
system("pause");
return 0;
}

void getElements(Array<int> &numbers)
{
int i = 0;
cout<<"Enter a positive integer:";
cin >> numbers[i];
while(numbers[i] !=-1)
{
i++;
if(i == numbers.length())
numbers.changeSize(2*i);
cout<<"Enter a positive integer(enter -1 to end):";
cin>>numbers[i];
}
numbers.changeSize(i);

cout<<"getElemens:"<<numbers.err()<<endl;

}

float calcAverage(Array<int> avnums)
{
int sum = 0;
for(int i=0;i<avnums.length();i++)
sum += avnums[i];
cout<<"calcAverage:"<<avnums.err()<<endl;
return sum/(float)(avnums.length());
}

分享到:
评论

相关推荐

    Array数组模板vc

    抽象类+模板,实现数组模板,可以有助于模板的学习

    基于模板实现的高效多维度Array类(含测试代码)

    A high-performance multi-dimensional C++ array class

    一组新的多维数组模板类

    一组新的多维数组模板类 by chen3feng(RoachCock@smth) email: chen3feng@163.com, chen3fengx@163.com, chen3fengx@hotmail.com [引言] 在C/C++开发中,多维数组是一个让很多人感到棘手的问题.原因...

    ANSI-ISO关于模板的定义

    最初模板被视为对如Array和List这 种泛型容器类的一种支持。近几年,使用模板的经验显示,这种特性对于设计和实现通用库十分有用,比如STL。模板化的库和frameworks都是高效方 便的。通过模板的广泛使用,C++增加了...

    我设计的一个非常有用的动态数组类

    我设计的一个非常有用的动态数组类。程序带有范例。

    C++数组的模版实现代码

    C++数组的模版实现代码,实现双下标重载的Matrix

    玩转模板--自动代码生成工程

    通过修改VelocityUtils类实现.可以自由用户自定义工具,丰富模板参数的处理,如在日期输出时对其进行格式化输出 例如: VelocityContext context = new VelocityContext(map); context.put("dateTool", new DateTool...

    代码雨JavaScript模板

    本资源有详细讲解和代码实现步骤,想学习的请移步我的贴子,里面有html版本的,还有相关知识点的介绍,学会方法更加重要! https://blog.csdn.net/g55zhw93/article/details/108019264 资源内含有三个文件,一个html...

    PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例

    本文实例讲述了PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能。分享给大家供大家参考,具体如下: 这里模拟tp框架模板变量分配与赋值操作。 extract($arr); //extract 的作用:从数组...

    VC 仿MFC的动态模板数组实例.rar

    VC 仿MFC的动态模板数组实例,作者:黄建雄。本模块通过双向链表实现一个相对高效的的动态数组,函数名  :FTEB_Array_GetDestSegEntry  功能 :返回目标索引指向的段头节点的指针  输入 :pArray 一个链对象  ...

    judy-template:Judy 数组的实现,包装在一个 c++ 模板中。 使用 Karl Malbrain 的实现,http

    这使用了Judy Array 实现。 可以通过 Doug Baskins 在 sourceforge 或上的找到更多信息。模板judyLArray - int-int Judy Array 的 C++ 模板包装器。 JudyKey 和 JudyValue 必须是整数类型且大小与指针相同(即 32 ...

    [原创]自己工作中常用的模板库,简化你的工作

    这上传的资源中包含一套我工作中常用的模板库,及不需要MFC支持的excel操作接口,导出函数调用栈(dump stack)接口,可以直接用VS2008运行TestCodeLib.sln来根据unit test来了解用法。 ⑴ 需求(requirements) 重量级...

    templated-segment-tree:段树的模板化C ++实现,可用于诸如sum,product,min和max之类的常用功能

    模板段树介绍此存储库包括一些用于分段树的模板化C ++实现,这些实现可用于关联的聚合函数,例如sum,product,min和max。 分段树非常快,可以在可范围内的对象(例如数组)上查找范围聚集,同时允许范围更新。 给出...

    ThinkPHP模板中数组循环实例

    本文实例讲述了ThinkPHP模板中数组循环的实现方法。分享给大家供大家参考。具体实现方法如下: ThinkPHP开发过程中经常用到输出数组在模板中使用,一般select出来的数据都是二维数组,我们在模板中用volist标签就...

    面向对象与C++试题.doc

    6、已知X类,则当程序执行到语句X array[3];时,调用了( )次构造函数。 A.0 B.1 C.2 D.3 7、有关析构函数的说法,不正确的是( )。 A.析构函数有且仅有一个 B.析构函数和构造函数一样可以有形参 C.析构...

    stl数据结构.docx

    C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现,称为容器,如 queues(队列)、lists(链表)、和 stacks(栈)等。 STL容器是由一些运用最广的一些...

    一个VC++仿MFC的动态模板数组源代码

    内容索引:VC/C++源码,其它分类,数组 一个VC++仿MFC的动态模板数组源代码,提供C、C++两个版本,其中关于一些... fteb_array.c 本模块通过双向链表实现一个相对高效的的动态数组,返回目标索引指向的段头节点的指针。

    PHP轻量级框架DQFramework.zip

    控制器继承类M实现模板 模板使用的是smarty的模板机制,使用标签为&lt;{}&gt; $this-&gt;assign(variable,value); $this-&gt;display(templetes); $this-&gt;display(templetes,folder); 模板存放在项目文件夹下的View文件夹里 一般...

    C++ 使用模板实现一个List的实例

    C ++使用模板写的一个List template class List { private: struct Node { T data; Node *next; }; //head Node *head; //size int length; //process Node *p; //temp Node *q; public: List() {...

    有限差分法matlab两点边值代码-cuda_array:cuda_array

    由于模板技术在该库的实现中大量使用,因此必须使用CUDA 4.0才能编译使用它的代码。 但是,支持计算能力低于2.0的设备,尽管尚未测试低于1.3的设备。 与所有模板库相同,只需将所有文件复制到编译器可以找到的目录中...

Global site tag (gtag.js) - Google Analytics