今天在做一个关于数组相似度的题目,需要动态创建二维数组,刚开始想用常规的int a[ ][ ]建立,但很快就发现行不通,这种常规数组必须在编译前指定数组的维数,而这个题目在的维数必须在运行中计算得出,于是想到采用new来建立动态二维数组,这个方法行得通,但是很麻烦,也不太利于理解,后面决定采用vector< vector< int > >方法来创建,简单了不少,下面对两种方法都进行一下总结。
1.使用vector创建二维数组
#include <iostream>
#include <vector>
using namespace std;
void main()
{
//分配内存
int A,B;
cout<<"请输入数组的维数:";
cin>>A>>B;
vector< vector<int> > tmp(A);
for(vector<int>::size_type i=0; i<A; i++)
{
tmp[i].resize(B);
}
//初始化
int num=0;
for( vector<int>::size_type i=0; i<A; i++)
for( vector<int>::size_type j=0; j<B; j++)
{
tmp[i][j] = num;
num++;
}
//输出
for(vector<int>::size_type i=0; i<A; i++)
{
for(vector<int>::size_type j=0; j<B; j++)
{
cout<<tmp[i][j]<<' ';
}
cout<<endl;
}
}
其中创建二维数组的核心程序为:
//分配内存
int A,B;
cout<<"请输入数组的维数:";
cin>>A>>B;
vector< vector<int> > tmp(A);
for(vector<int>::size_type i=0; i<A; i++)
{
tmp[i].resize(B);
}
上述代码也可以简化为:
//二维数组初始化方式
vector< vector<int> > tmp( A, vector<int>(B) );
2.使用指针和new来创建二维数组
#include <iostream>
using namespace std;
void main()
{
//分配内存
int m,n;
cout<<"请输入数组的维数:";
cin>>m>>n;
int **p = new int *[m];
for(int i=0; i<m; i++)
{
p[i] = new int[n];
}
//初始化
int num=0;
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
{
p[i][j] = num;
num++;
}
//输出
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
cout<<p[i][j]<<' ';
}
cout<<endl;
}
}
其中创建二维数组的核心函数为:
//分配内存
int m,n;
cout<<"请输入数组的维数:";
cin>>m>>n;
int **p = new int *[m];
for(int i=0; i<m; i++)
{
p[i] = new int[n];
}