`
pleasetojava
  • 浏览: 732723 次
  • 性别: 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());
}

分享到:
评论

相关推荐

    AcArray类模板

    `AcArray`作为类模板,其实现了动态数组的核心功能,并且可以通过继承扩展其功能。这意味着其他特定对象的数组可以继承自`AcArray`,并利用其提供的基础能力。 #### 四、关键概念 `AcArray`类模板中有三个非常重要...

    Array数组模板vc

    这个“Array数组模板vc”项目可能是为Visual C++(VC)环境设计的一个实例,它利用了C++的模板机制来实现一个抽象类,该抽象类可以作为各种类型数组的基类。下面我们将深入探讨这个主题。 ### 1. 模板 模板是C++中...

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

    本主题将探讨一个基于模板实现的高效多维度Array类,该类旨在提供灵活、高性能的多维数组操作。 首先,让我们理解模板编程。模板是C++中的一种泛型编程工具,它允许我们编写通用的代码,适用于多种数据类型。模板...

    一维数组类模板的设计与实现

    ### 一维数组类模板的设计与实现 #### 概述 本篇文章主要介绍了一种用于构建一维数组数据结构的类模板设计与实现方法。通过此类模板,我们可以创建支持多种数据类型的数组,如 `char`、`int`、`float` 等,并提供...

    C++模板(包括函数模板和类模板)

    ### C++模板(包括函数模板和类模板) #### 模板概述 模板是C++语言的一个强大特性,它允许开发者编写能处理不同数据类型的通用代码。通过使用模板,程序员能够编写出灵活且可复用的代码,从而显著提高开发效率并...

    类模板实践-可变长数组类.7z

    总结起来,"类模板实践-可变长数组类"这个项目旨在通过实现一个自定义的类模板`Array`,让初学者理解C++中的类模板和动态数组的概念,同时掌握如何在C++中正确管理内存和实现类型安全的接口。通过这个实践,可以提升...

    模板类实现数组类封装模板类实现数组类封装

    为了解决这些问题,我们可以创建一个模板类`Array`,它将数组作为内部实现,但对外提供一个更友好的接口。模板类允许我们在实例化时指定元素的类型,这样我们就可以处理任何类型的数据,如整数、浮点数、自定义对象...

    C++类模板案例.zip

    本案例将深入探讨如何利用C++类模板实现泛型编程,以及如何处理数组等数据结构。 首先,我们来看类模板的基本语法。类模板定义时,我们用`template`关键字,后面跟着尖括号`&lt;typename T&gt;`,其中`T`是一个类型参数,...

    数据结构——线性表类模板

    在C++编程语言中,类模板被广泛用于实现抽象数据类型,它允许我们创建通用的数据结构,适用于多种数据类型。本主题将深入探讨如何使用C++类模板来实现一个线性表。 首先,我们需要定义一个线性表的基本操作,包括...

    面向对象作业5-类模板.docx

    ### 知识点详解 ...总结来说,本题主要考察了如何设计和实现类模板,特别是如何利用类模板来处理泛型数组,这在实际开发中是非常实用的技术。通过本题的学习,可以更好地理解和掌握类模板的相关知识及其应用。

    基于C++模板 实现的数据结构代码

    二、用模板实现基本数据结构 2.1 数组 虽然C++内置了`std::array`,但我们可以用模板创建一个自己的动态数组类: ```cpp template class DynamicArray{ public: DynamicArray(size_t size); ~DynamicArray(); T...

    ARRAY实现MATRIX运算

    - **模板类**:为了使矩阵运算适用于不同类型的数据(如浮点数或复数),可以使用C++的模板类。 - **向量化运算**:如使用OpenMP或CUDA库,可以实现并行计算,提高性能。 6. **Array_Matrix.cpp源文件** 提供的`...

    循环队列 C++不同策略模板实现

    以上是关于"循环队列 C++不同策略模板实现"的详细知识点介绍,通过这样的实现,我们可以创建高效且灵活的队列结构,适应各种场景的需求。在实际编程中,理解和掌握这些知识对于提高代码质量和效率至关重要。

    C++模板讲解习题及答案

    类模板的实例化是指根据需要实例化出具体的类,例如,类模板 template &lt;typename T&gt; class Array { ... }; 可以实例化出 intArray、doubleArray 和 longArray 等多种类型的类。 4. 模板的特性 模板有许多特性,例如...

    编写一个使用类模板对数组进行排序.pdf

    首先,我们定义了一个名为array的类模板,该类模板有一个模板参数T,表示数组的元素类型。该类模板中定义了五个成员函数:构造函数、析构函数、下标运算符、搜索函数和排序函数。 在构造函数中,我们申请了一个数组...

    phpnew模板引擎类.zip

    - **配置**:设置模板引擎的配置参数,如模板目录、编译目录等,这通常通过创建实例并传递配置数组实现。 - **加载模板**:通过引擎类的方法加载模板文件,如`load('path/to/template.html')`。 - **赋值变量**:...

    C++动态数组模板实现

    模板分为函数模板和类模板,这里我们将关注类模板,尤其是用它来实现动态数组。 1. **动态数组的概念**:动态数组是在内存堆上分配的一块连续空间,其大小可以在程序运行期间改变。通常,我们使用`new`运算符来申请...

    WordPress不同分类使用不同的文章模板的方法

    本文将介绍两种方法来实现 WordPress 不同分类使用不同的文章模板。 方法一:根据模板文件名进行判断 这种方法需要在当前主题的 functions.php 文件中添加代码,以便自动选择模板文件。首先,我们需要定义模板文件...

    php仿照smarty模板类

    在实现这样一个模板类时,我们需要编写一个基础的类,包含上述功能的接口,并实现这些方法。例如,`Template`类可以有以下方法: ```php class Template { public function __construct($config = array()) { /* ...

    ch13 泛型机制—模板(最终版).ppt

    这一机制通过模板实现,可以极大地提高代码的重用性和灵活性。本章将深入探讨类模板及其相关概念。 首先,类模板是C++中定义泛型类的一种方式。它允许用户为类定义一个模式,使得类中的数据成员、成员函数的参数或...

Global site tag (gtag.js) - Google Analytics