Programación orientada a objetos C ++ 036: Clase de plantilla de matriz tridimensional CArray3d que es difícil de confundir ---- (Beijing University Mooc)


Enlace de blog especial

Blog de ejercicios después de la clase de C ++ POJ de la Universidad de Pekín Registro completo de soluciones


Titulo original

Inserte la descripción de la imagen aquí

#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;
}

Implementación del código (es realmente difícil de entender a fondo y lleva mucho tiempo)

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);
    }

Buena referencia de blog

Solución de problemas CArray3d de Delin Enbao

Supongo que te gusta

Origin blog.csdn.net/qq_37500516/article/details/115030633
Recomendado
Clasificación