类设计--二维数组
来源:互联网 发布:德尔无醛芯地板知乎 编辑:程序博客网 时间:2024/06/05 11:28
重载运算符 [][]
在一维数组的基础上重新设计二维数组类
利用C++的template参数的嵌套性
Array<Array <double> > a(3)
1.重新加入了个rsize,判断二维数组是否超。
1.重新加入了个rsize,判断二维数组是否超。
#include <iostream>using namespace std;template <class T>class Array{private: T *arr; int arrsize;public: Array(int asize=100):arrsize(asize){arr=new T[asize];} ~Array(){delete []arr;} T& operator[](int ind); operator T*() {return arr;}void resize(int rsize);};template <class T>T& Array<T>::operator[](int ind){ static T t; if (ind<arrsize&&ind>=0) return arr[ind]; else { cout<<"下标出界:("<<ind<<")"; return t; }}template <class T>void Array<T>::resize(int rsize){if (rsize<0||rsize==arrsize)return ;T *newarr=new T[rsize];int n=(rsize<arrsize)?rsize:arrsize;for(int i=0;i<n;i++)newarr[i]=arr[i]; //保存原数组值delete []arr;arr = newarr;arrsize = rsize;}int main(){ Array<Array <double> > a(3); int i,j;a[0].resize(2);a[1].resize(2);a[2].resize(2); for(i=0;i<3;i++) for(j=0;j<2;j++) a[i][j] = 10*i+j;cout<<a[1][1]<<endl;cout<<a[1][3]<<endl;cout<<a[3][1]<<endl; return 0;}2.使用<vector>
a.at(1).at(3)
<vector>中.at()可以检查是否越界
<pre name="code" class="cpp">vector<vector <double> > a(3);需要加入这句话,可以检查二维a.at().at().
#include <iostream>#include <vector>using namespace std;template <class T>class Array{private: T *arr; int arrsize;public: Array(int asize=100):arrsize(asize) { arr=new T[asize]; } ~Array() { delete []arr; } T& operator[](int ind); operator T*() { return arr; } void resize(int rsize);};template <class T>T& Array<T>::operator[](int ind){ static T t; if (ind<arrsize&&ind>=0) return arr[ind]; else { cout<<"下标出界:("<<ind<<")"; return t; }}template <class T>void Array<T>::resize(int rsize){ if (rsize<0||rsize==arrsize) return ; T *newarr=new T[rsize]; int n=(rsize<arrsize)?rsize:arrsize; for(int i=0; i<n; i++) newarr[i]=arr[i]; //保存原数组值 delete []arr; arr = newarr; arrsize = rsize;}int main(){// Array<Array <double> > a(3); vector<vector <double> > a(3); int i,j; a[0].resize(2); a[1].resize(2); a[2].resize(2); for(i=0; i<3; i++) for(j=0; j<2; j++) a[i][j] = 10*i+j; cout<<a[1][1]<<endl; cout<<a[1][3]<<endl; cout<<a[3][1]<<endl; //出现终止程序//a[3][1]=1; cout<<a.at(1).at(3)<<endl; //越界检查 , a[1][3] 不同 return 0;}
3.重新设计二维数组。
#include <iostream>using namespace std;template <class T>class Array{private: T *arr; int arrsize;public: Array(int asize=100):arrsize(asize){arr=new T[asize];} ~Array(){delete []arr;} T& operator[](int ind); operator T*() {return arr;}void resize(int rsize);};template <class T>T& Array<T>::operator[](int ind){ static T t; if (ind<arrsize&&ind>=0) return arr[ind]; else { cout<<"下标出界:("<<ind<<")"; return t; }}template <class T>void Array<T>::resize(int rsize){if (rsize<0||rsize==arrsize)return ;T *newarr=new T[rsize];int n=(rsize<arrsize)?rsize:arrsize;for(int i=0;i<n;i++)newarr[i]=arr[i]; //保存原数组值delete []arr;arr = newarr;arrsize = rsize;}template <class T>class Array2{private: Array<T> *arr; int arrrow,arrcol;public: Array2(int =100,int =100); ~Array2(){delete []arr;}; Array<T>& operator[](int ind); operator Array<T>*() {return arr;}};template <class T>Array2<T>::Array2(int row,int col):arrrow(row),arrcol(col){arr=new Array<T>[row];for(int i = 0; i < row; i++)arr[i].resize(col);};template <class T>Array<T>& Array2<T>::operator[](int ind){ static Array<T> t; if (ind<arrrow&&ind>=0) return arr[ind]; else { cout<<"下标2出界:("<<ind<<")"; return t; }}int main(){ Array2<double> a(3,2); int i,j; for(i=0;i<3;i++) for(j=0;j<2;j++) a[i][j] = 10*i+j;//cout<<(*(a+1))[1]<<endl;//cout<<*(a[1]+0)<<endl;//cout<<*(*(a+0)+1)<<endl;cout<<a[1][1]<<endl;cout<<a[1][3]<<endl;cout<<a[3][1]<<endl; return 0;}不能重载【】【】。
0 0
- 类设计--二维数组
- 矩阵类,二维数组
- 二维数组类Douary
- 二维数组类Douary
- 简单二维数组模板类
- 二维动态数组类模板
- 排序、Arrays.类、二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 在多标签分类中,准备mulan开源软件所需要的.arff和.xml数据的方法
- 查看oracle客户端位数
- 三国全明星辅助说明
- it-tidalwave-semantic-aux-1.0.13.jar下载
- 计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)
- 类设计--二维数组
- 爱受伤
- 中国移动拟将部分服务价格下调至多50%
- springMVC <spring:message>国际化
- 记事本等微软的文本编辑工具自动加BOM导致HTML异常
- Unity应用怎么暂停(Pause)
- package&import
- SDN Pre-Assesment Quiz 计算机网络知识
- 如何写出更好的Java代码