首页 > 代码库 > <细节>动态创建二维数组

<细节>动态创建二维数组

        今天在做一个关于数组相似度的题目,需要动态创建二维数组,刚开始想用常规的int a[ ][ ]建立,但很快就发现行不通,这种常规数组必须在编译前指定数组的维数,而这个题目在的维数必须在运行中计算得出,于是想到采用new来建立动态二维数组,这个方法行得通,但是很麻烦,也不太利于理解,后面决定采用vector< vector< int > >方法来创建,简单了不少,下面对两种方法都进行一下总结。

1.使用vector创建二维数组

#include <iostream>#include <vector>using namespace std;void main(){<span style="white-space:pre">	</span><span style="white-space:pre">	</span>//分配内存<span style="white-space:pre">	</span>int A,B;<span style="white-space:pre">	</span>cout<<"请输入数组的维数:";<span style="white-space:pre">	</span>cin>>A>>B;<span style="white-space:pre">	</span>vector< vector<int> > tmp(A);<span style="white-space:pre">	</span>for(vector<int>::size_type i=0; i<A; i++)<span style="white-space:pre">	</span>{<span style="white-space:pre">		</span>tmp[i].resize(B);<span style="white-space:pre">	</span>}<span style="white-space:pre">	</span>//初始化<span style="white-space:pre">	</span>int num=0;<span style="white-space:pre">	</span>for( vector<int>::size_type i=0; i<A; i++)<span style="white-space:pre">		</span>for( vector<int>::size_type j=0; j<B; j++)<span style="white-space:pre">		</span>{<span style="white-space:pre">			</span>tmp[i][j] = num;<span style="white-space:pre">			</span>num++;<span style="white-space:pre">		</span>}<span style="white-space:pre">	</span>//输出<span style="white-space:pre">	</span>for(vector<int>::size_type i=0; i<A; i++)<span style="white-space:pre">	</span>{<span style="white-space:pre">		</span>for(vector<int>::size_type j=0; j<B; j++)<span style="white-space:pre">		</span>{<span style="white-space:pre">			</span>cout<<tmp[i][j]<<' ';<span style="white-space:pre">		</span>}<span style="white-space:pre">		</span>cout<<endl;<span style="white-space:pre">	</span><span style="white-space:pre">	</span>}}
  
其中创建二维数组的核心程序为:

//二维数组初始化方式
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(){<span style="white-space:pre">	</span>//分配内存<span style="white-space:pre">	</span>int m,n;<span style="white-space:pre">	</span>cout<<"请输入数组的维数:";<span style="white-space:pre">	</span>cin>>m>>n;<span style="white-space:pre">	</span>int **p = new int *[m];<span style="white-space:pre">	</span>for(int i=0; i<m; i++)<span style="white-space:pre">	</span>{<span style="white-space:pre">		</span>p[i] = new int[n];<span style="white-space:pre">	</span>}<span style="white-space:pre">	</span>//初始化<span style="white-space:pre">	</span>int num=0;<span style="white-space:pre">	</span>for(int i=0; i<m; i++)<span style="white-space:pre">	</span>for(int j=0; j<n; j++)<span style="white-space:pre">	</span>{<span style="white-space:pre">		</span>p[i][j] = num;<span style="white-space:pre">		</span>num++;<span style="white-space:pre">	</span>}<span style="white-space:pre">	</span>//输出<span style="white-space:pre">	</span>for(int i=0; i<m; i++)<span style="white-space:pre">	</span>{<span style="white-space:pre">		</span>for(int j=0; j<n; j++)<span style="white-space:pre">		</span>{<span style="white-space:pre">			</span>cout<<p[i][j]<<' ';<span style="white-space:pre">			</span>cout<<endl;<span style="white-space:pre">		</span>}}


其中创建二维数组的核心函数为:

//分配内存
int m,n;
cin>>m>>n;
int **p = new int *[m];
for(int i=0; i<m; i++)
{
<span style="white-space:pre">	</span>p[i] = new int[n];
}