第14周项目三—数组类模板

本文档展示了如何在C++中实现一个数组类模板,允许存储不同类型的元素。类模板`Array`包括构造函数、赋值运算符、访问运算符、获取数组大小的方法以及调整数组大小的功能。代码示例中,`Array`被用来存储质数并进行相关操作。
摘要由CSDN通过智能技术生成
/* 
*烟台大学计算机学院 
 
*文件名称:xiangmu1.cpp 
*作者:李亚辉 
*完成日期:2016年6月24日 
*版本号:vc++6.0 
* 
*问题描述:  
在数组类的基础上,将之改造为类模板,以使数组中可以存储各种类型的数据。

template <class T>  //数组类模板定义
class Array
{
private:
    T* list;        //用于存放动态分配的数组内存首地址
    int size;       //数组大小(元素个数)
...
}; 
*输入描述: 
*程序输出:*/  
#include <iostream>  
#include <cassert>  
#include<iomanip>  
#include <cstring>  
using namespace std;  
template<class T>  
class Array  
{  
public:  
    Array(int s=50);  
    Array(const Array<T> &a);  
    Array<T>& operator=(const Array<T> &a);  
    const T& operator[](int s) const;  
    T& operator[](int s);  
    int get_size() const;  
    void re_size(int s);  
    ~Array();  
private:  
    T* list;  
    int size;  
};  
template <class T> Array<T>::Array(int s)  
{  
    assert(s>0);  
    size=s;  
    list=new T[size];  
}  
template <class T> Array<T>::Array(const Array<T> &a)//不带<>的Array是该复制构造函数的名字  
{  
    size=a.size;  
    list=new T[size];  
    for(int i=0;i<size;i++)  
        list[i]=a.list[i];  
}  
template<class T> Array<T>::~Array()  
{  
    delete [] list;  
}  
template<class T>  
Array<T>& Array<T>::operator=(const Array<T>& a)//太长的还是换行吧。。别晕了  
{  
    if(*this!=a)  
    {  
        if(size!=a.size)  
            {  
                delete [] list;  
                size=a.size;  
                list=new T[size];  
            }  
    for(int i=0;i<size;i++)  
        list[i]=a.list[i];  
    }  
}  
template<class T>  
T& Array<T>::operator[](int s)  
{  
    assert(s>=0&&s<size);  
    return list[s];  
}  
template<class T>  
const T& Array<T>::operator[](int s) const  
{  
    assert(s>=0&&s<size);  
    return list[s];  
}  
template<class T>  
int Array<T>::get_size() const  
{  
    return size;  
}  
  
template<class T>  
void Array<T>::re_size(int s)  
{  
    assert(s>=0);  
    if(size==s)  
        return;  
    size=s;  
    T* newlist=new T[s];  
    int n=(size<s)?size:s;  
    for(int i=0;i<n;i++)  
        newlist[i]=list[i];  
    delete []list;  
    list=newlist;  
}  
int main()  
{  
    Array<int> a(20);  
    int n,count=0;  
    cout<<"limit"<<endl;  
    cin>>n;  
    for(int i=2;i<=n;i++)  
    {  
        bool is_prime=true;  
        for(int j=0;j<count;j++)  
            if(i%a[j]==0)  
        {  
            is_prime=false;  
            break;  
        }  
        if(is_prime)  
        {  
            if(count==a.get_size())a.re_size(count*2);  
            a[count++]=i;  
        }  
    }  
  
    for(int i=0;i<count;i++)  
        cout<<setw(8)<<a[i];  
    cout<<endl;  
    return 0;  
}  
/*学习心得:感觉构造函数的名字和Array<T>容易搞混,不过整体感觉项目还可以,没有以前那种没头绪的感觉了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值