今天在做一个关于数组相似度的题目,需要动态创建二维数组,刚开始想用常规的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];
}
原文地址:http://blog.csdn.net/taotao1990228/article/details/32331209