文件操作与模板编程题 #1(C++程序设计第7周)
来源:互联网 发布:地图 数据可视化工具 编辑:程序博客网 时间:2024/06/01 18:01
问题描述
实现一个三维数组模版CArray3D,可以用来生成元素为任意类型变量的三维数组,使得下面程序输出结果是:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,
注意,只能写一个类模版,不能写多个。
#include <iostream>using namespace std;// 在此处补充你的代码int main(){ CArray3D<int> a(3,4,5); int No = 0; for( int i = 0; i < 3; ++ i ) for( int j = 0; j < 4; ++j ) for( int k = 0; k < 5; ++k ) a[i][j][k] = No ++; for( int i = 0; i < 3; ++ i ) for( int j = 0; j < 4; ++j ) for( int k = 0; k < 5; ++k ) cout << a[i][j][k] << ",";return 0;}
输入
无
输出
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,
样例输入
无
样例输出
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,
提示
提示:类里面可以定义类,类模版里面也可以定义类模版。例如:
class A{ class B { };};templateclass S{ T x; class K { T a; };};
PS:这道题还是废了点时间的,尤其算法1中刚开始写的为屏蔽部分的代码,编译成功,运行会出错,至今仍不清楚错误在哪(可能需要重载赋值运算符,默认的又有什么作用?)。**算法2是网上看到的,写的很好,摘抄如下。
源码
算法1
#include <iostream>using namespace std;// 在此处补充你的代码template <class T>class CArray3D{public: template <class T1> class CArray2D { private: T1 *a1;//指向二维数组的指针 int row;//数组行数 int column;//数组列数 public: CArray2D():a1(NULL),row(0),column(0) {} CArray2D(int paraRow, int paraColumn):row(paraRow),column(paraColumn) { a1 = new T1[row*column];} void set(int paraRow, int paraColumn) { row = paraRow; column = paraColumn; a1 = new T1[row*column]; } ~CArray2D(){if(a1) delete[] a1;} T1* operator[](int i) {return a1+i*column;}//重载的实际上是第二维的[], 第一维的[]直接调用int型一维数组的定义 };private: CArray2D<T> *ptr;public: CArray3D():ptr(NULL) {} CArray3D(int z, int y, int x) { ptr = new CArray2D<T>[z]; for (int m = 0; m < z; m++) { ptr[m].set(y,x);// CArray2D<T> a(y, x);// ptr[m] = a; } } CArray2D<T>& operator[](int i){return ptr[i];} ~CArray3D(){if (ptr){delete[] ptr;}}};int main(){ CArray3D<int> a(3,4,5); int No = 0; for( int i = 0; i < 3; ++ i ) for( int j = 0; j < 4; ++j ) for( int k = 0; k < 5; ++k ) a[i][j][k] = No ++; for( int i = 0; i < 3; ++ i ) for( int j = 0; j < 4; ++j ) for( int k = 0; k < 5; ++k ) cout << a[i][j][k] << ","; return 0;}
算法2
#include <iostream>using namespace std;template <class T>class CArray3D{public: template <class T1> class CArray2D { public: template <class T2> class CArray1D { public: CArray1D() { a = NULL; } void set(int n) { if(a) delete[]a; a = new T[n]; } T2 &operator[](int i) { return a[i]; } ~CArray1D(){delete []a;} private: T2 * a; }; CArray2D() { a1 = NULL; } void set(int m, int n) { a1 = new CArray1D<T1> [m]; for(int i = 0; i < m; i ++) a1[i].set(n); } ~CArray2D() {delete [] a1;} CArray1D<T1> & operator[](int i) { return a1[i]; } private: CArray1D <T1> * a1; }; CArray3D(int p, int m, int n) { a2 = new CArray2D<T> [p]; for(int i = 0; i < p; i ++) a2[i].set(m,n); } ~CArray3D(){delete[] a2;} CArray2D<T>& operator[](int i) { return a2[i]; }private: CArray2D<T> *a2;};int main(){ CArray3D<int> a(3,4,5); int No = 0; for( int i = 0;i < 3; ++ i ) for(int j = 0; j < 4; ++j ) for(int k = 0; k < 5; ++k ) a[i][j][k]= No ++; for( int i = 0;i < 3; ++ i ) for(int j = 0; j < 4; ++j ) for(int k = 0; k < 5; ++k ) cout<< a[i][j][k] << ","; return 0;}
0 0
- 文件操作与模板编程题 #1(C++程序设计第7周)
- * 文件操作与模板 编程题#1(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- ** 文件操作与模板 编程题#4: 字符串操作(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- 文件操作与模板 编程题#2: 实数的输出格式(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- 文件操作与模板 编程题#3: 整数的输出格式(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- C02-程序设计基础提高班(C++)第14周上机任务-文件操作
- 类与对象编程题1(C++程序设计第3周)
- 继承与派生编程题1(C++程序设计第5周)
- 多态与虚函数编程题 #1(C++程序设计第6周)
- STL编程题1(C++程序设计第1周)
- STL编程题1(C++程序设计第1周)
- STL编程题1(C++程序设计第8周)
- ** 标准模板库 STL-2 编程题#4: 字符串操作(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- 编程题#4: 字符串操作(C++程序设计第9周)
- 多态与虚函数-编程题#1(C++程序设计第6周)
- 类与对象编程题2(C++程序设计第3周)
- 类与对象编程题3(C++程序设计第3周)
- 多态与虚函数编程题 #2(C++程序设计第6周)
- 数据结构C语言版之邻接表(各种遍历)
- I Hate It (HD_1754) 线段树
- QFileDialog、QColorDialog中英文提示信息翻译方法
- 关于mybatis使用中遇到的问题集合帖(持续更新)
- 使用FEC改善UDP(RTP)音视频传输效果
- 文件操作与模板编程题 #1(C++程序设计第7周)
- Java 8 的 JVM 有多快?Fork-Join 性能基准测试
- 数据结构C语言版之邻接矩阵(遍历)
- 给马小怂写的教程-----微信如何添加表情包
- Activity之间传递Bitmap
- linux 消息队列查看和删除
- 数据结构课程设计源代码
- CSS3伪类选择器
- C语言---基础