C++动态生成二维和三维数组

最近在编写一些C++小程序的时候用到二维和三维数组,看了很多博客关于动态生成二维和三维数组的方法,写的非常好,但是一大串的for循环还是不想写,为了偷下懒给自己写几个函数留着以后写其他程序的时候直接用。今天看书的时候看到了C++的类模板,正好借这个编一个函数生成二维和三维数组。

#include <iostream>
using namespace std;

template <class T>          
T ** c2arr(T **p,int m,int n){
	p=new T *[m];
	for (int i=0;i<m;i++){
	p[i]=new T[n];
	}
	
	for (int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++){
			cin>>p[i][j];	
		}
	}
	return p;
}
//类模板用来创建不同类型的二位数组;

template <class T>          
void output2(T **p,int m,int n){
	
	for (int i=0;i<m;i++)
		{
			for(int j=0;j<n;j++){				
				cout<<p[i][j]<<" ";				
			}
			cout<<endl;
		}
	
}
// 输出二维数组 
 
int main(int argc, char** argv) {
	int m,n;
	cout<<"please input the number m,n"<<endl;
	cin>>m>>n;
	int **p;	

	p=c2arr(p,m,n);	
	output2(p,m,n); 
	return 0;
}

先编一个二维的输入和输出函数,用的时候直接使用 c2arr(p,m,n) 就生成一个m行n列的二维数组。

网上已经有很多自己写的三维向量类的文章,他们大都写了很多功能,而且写的也都很漂亮。我属于小白类型,就自己给自己写个简单的,只有输入和输出功能的类吧。

typedef   vector< vector < vector <int> > >   vector3;

class vector3d
{
public:
	vector3d(int m1, int n1, int k1) {
		creat3(m1, n1, k1);
		m = m1;
		n = n1;
		k = k1;
	};
	void creat3(int m1, int n1, int k1)
	{

		vector3 p(m1, vector< vector <int> >(n1, vector<int>(k1)));
		a = p;
		for (int i = 0; i<m1; i++)
		{
			for (int j = 0; j<n1; j++)
			{
				for (int k = 0; k<k1; k++)
				{
					a[i][j][k] = 0;
				}
			}
		}
	}
	void input() {
		for (int i = 0; i<m; i++)
		{
			for (int j = 0; j<n; j++)
			{
				for (int k = 0; k<n; k++)
				{
					cin >> a[i][j][k];
				}
			}
		}
	}
	void output() {
		for (int i = 0; i<m; i++)
		{
			for (int j = 0; j<n; j++)
			{
				for (int l = 0; l<k; l++)
				{
					cout << a[i][j][l] << " ";
				}
				cout << endl;
			}
			cout << endl;

		}
	}
private:
	int m, n, k;
	vector3 a;

};

另外,附上其他博主的文章https://blog.csdn.net/hw140701/article/details/52298288

猜你喜欢

转载自blog.csdn.net/explorer9607/article/details/81488978