第十四周=--数组类模板
2016-06-02 09:27
369 查看
问题及代码:
运行结果:
/*作者:马艳艳; 完成日期:2016/6/2*/ #include <iostream> #include <iomanip> #include <cassert> using namespace std; template <class T> //数组类模板定义 class Array { private: T* list; //用于存放动态分配的数组内存首地址 int size; //数组大小(元素个数) public: Array(int sz = 50); Array(const Array<T> &a); ~Array(); //析构函数 Array<T> & operator = (const Array<T> &m); //重载"=“ T & operator [] (int i); //重载"[]” const T & operator [] (int i) const; operator T * (); //重载到T*类型的转换 operator const T * () const; int getSize() const; //取数组的大小 void resize(int sz); //修改数组的大小 }; template <class T> Array<T>::Array(int sz)//构造函数 { assert(sz>0); size=sz; list=new T [size]; } template <class T> Array<T>::~Array() //析构函数 { delete [] list; } template <class T> Array <T>::Array(const Array<T>&a)//复制构造函数 { 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<T>::operator=(const Array<T>&m)//重载“=” { if(m!=this) { if(size!=m.size) { delete []list; size=m.size; list=new T [size]; } for(int i=0;i<size;i++) list[i]=m.list[i]; } return *this; } template <class T> T &Array<T>::operator[] (int n) { assert(n >= 0 && n < size); //检查下标是否越界 return list ; //返回下标为n的数组元素 } template <class T> const T &Array<T>::operator[] (int n) const { assert(n >= 0 && n < size); //检查下标是否越界 return list ; //返回下标为n的数组元素 } template <class T> Array<T>::operator T*()//指针转换运算 { return list; } template <class T> Array<T>::operator const T *()const//指针转换运算符重载 { return list; } template <class T> int Array<T>::getSize() const//取当前数组大小 { return size; } template <class T> void Array<T>::resize(int sz) { assert(sz>=0); if(sz==size) return; T *newList=new T[sz]; int n=(sz<size)?sz:size;//重新分配小的内存空间 for(int i=0;i<size;i++) newList[i]=list[i]; delete [] list; list=newList; size=sz; } int main() { Array<int> a(10); // 用来存放质数的数组,初始状态有10个元素。 int n, count = 0; cout << "Enter a value >= 2 as upper limit for prime numbers: "; cin >> n; for (int i = 2; i <= n; i++) { bool isPrime = true; for (int j = 0; j < count; j++) if (i % a[j] == 0) //若i被a[j]整除,说明i不是质数 { isPrime = false; break; } if (isPrime) { if (count == a.getSize()) a.resize(count * 2); a[count++] = i; } } for (int i = 0; i < count; i++) cout << setw(8) << a[i]; cout << endl; return 0; }
运行结果:
相关文章推荐
- iOS热文欣赏
- html5解决登录超时
- codeforces 677 B Vanya and Food Processor (模拟)
- 如何理解闭包?
- Android开发之基本控件和详解四种布局方式
- 母函数(转)
- wkwebView的 学习
- 第十二周上机实践项目 项目1-实现复数类中的运算符重载 (2)
- Ubuntu 16 下载、编译Nexus 6 Android6.0源码记录
- linux学习点滴(一步步总结,常用命令)
- 跑步与读书都废掉了...工作目前也在换新的.
- 第二冲刺阶段 工作总结 10
- mvc框架
- 白话开发——Android Studio代码调试技巧篇
- oracle学习(六)--时间日期函数
- poj1013 Counterfeit Dollar
- WPF checkbox绑定和通过值更新将存入的 1-0 转换成 true false
- Android Studio详细教程汇总
- hello
- 第13周阅读程序(3)