最近在编写一些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