C++面向对象程序设计 036:很难蒙混过关的CArray3d三维数组模板类 ---- (北大Mooc)


专题博客链接

北大C++ POJ课后习题博客全解记录


原题题目

在这里插入图片描述

#include <iostream>
#include <iomanip> 
#include <cstring>
using namespace std;
template <class T>
class CArray3D
{
    
    
// 在此处补充你的代码
};

CArray3D<int> a(3,4,5);
CArray3D<double> b(3,2,2);
void PrintA()
{
    
    
	for(int i = 0;i < 3; ++i) {
    
    
		cout << "layer " << i << ":" << endl;
		for(int j = 0; j < 4; ++j) {
    
    
			for(int k = 0; k < 5; ++k) 
				cout << a[i][j][k] << "," ;
			cout << endl;
		}
	}
}
void PrintB()
{
    
    
	for(int i = 0;i < 3; ++i) {
    
    
		cout << "layer " << i << ":" << endl;
		for(int j = 0; j < 2; ++j) {
    
    
			for(int k = 0; k < 2; ++k) 
				cout << b[i][j][k] << "," ;
			cout << endl;
		}
	}
}

int main()
{
    
    

	int No = 0;
	for( int i = 0; i < 3; ++ i ) {
    
    
		a[i];
		for( int j = 0; j < 4; ++j ) {
    
    
			a[j][i];
			for( int k = 0; k < 5; ++k )
				a[i][j][k] = No ++;
			a[j][i][i];	
		}
	}
	PrintA();
	memset(a[1],-1 ,20*sizeof(int));	
	memset(a[1],-1 ,20*sizeof(int));
	PrintA(); 
	memset(a[1][1],0 ,5*sizeof(int));	
	PrintA();

	for( int i = 0; i < 3; ++ i )
		for( int j = 0; j < 2; ++j )
			for( int k = 0; k < 2; ++k )
				b[i][j][k] = 10.0/(i+j+k+1);
	PrintB();
	int n = a[0][1][2];
	double f = b[0][1][1];
	cout << "****" << endl;
	cout << n << "," << f << endl;
		
	return 0;
}

代码实现(确实很有难度 彻底理解起来要花很多时间)

private:
    int x;
    int y;
    int z;
    T* Array3D;
public:
// 在此处补充你的代码
    class CArray2D
    {
    
    
        private:
            T* Array2D;
            int z;
        public:
        CArray2D(T* tmp,int tmp2){
    
    Array2D = tmp;z=tmp2;}
        T* operator [](int a)
        {
    
    
            return Array2D+a*z;
        }
        operator T*()
        {
    
    
            return Array2D;
        }
    };
    CArray3D(int a,int b,int c):x(a),y(b),z(c)  {
    
    Array3D = new T[a*b*c];}
    CArray2D operator[](int a)
    {
    
    
        return CArray2D(Array3D+a*y*z,z);
    }

优秀博客借鉴

德林恩宝的 CArray3d 的题目解答

猜你喜欢

转载自blog.csdn.net/qq_37500516/article/details/115030633