今天在做一个关于数组相似度的题目,需要动态创建二维数组,刚开始想用常规的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