C++中二維動態陣列的建立
阿新 • • 發佈:2019-01-07
方法1.用new / delete建立二維動態陣列
程式碼:
#include<iostream> #include<vector> using namespace std; #define ROW 2 //行數 #define COLUMN 3 //列數 #define VALUE 1 //陣列元素值 //使用new/delete建立二維陣列 int main() { int **arr=new int*[ROW]; int i,j; for(i=0;i<ROW;i++) { arr[i]=new int[COLUMN]; } for(int i=0;i<ROW;i++) { for(j=0;j<COLUMN;j++) { arr[i][j]=VALUE; cout<<arr[i][j]<<" "; } cout<<endl; } for(i=0;i<ROW;i++) delete [] arr[i]; delete arr; return 0; }
方法2.使用容器建立二維動態陣列
方法a.
#include<iostream> #include<vector> using namespace std; #define ROW 2 //行數 #define COLUMN 3 //列數 #define VALUE 1 //陣列元素值 //使用容器建立動態二維陣列 int main() { vector<vector<int>> arr(ROW);//設定二維陣列的行數,定義型別為vector<int>的向量arr,該向量中含有ROW個子向量,這ROW個子向量中的資料 型別為int vector<vector<int>>::iterator it1;//定義迭代器it1,用於遍歷二維陣列中的行 vector<int>::iterator it2;//定義迭代器it2,用於遍歷二維陣列中的列 for(it1=arr.begin();it1!=arr.end();it1++) { (*it1).resize(COLUMN);//為每個行向量設定大小COLUMN for(it2=it1->begin();it2!=it1->end();++it2) { *it2=VALUE; } } cout<<"arr:"<<arr.size()<<endl;//輸出的為二維陣列的行數 for(it1=arr.begin();it1!=arr.end();it1++) { for(it2=it1->begin();it2!=it1->end();it2++) { cout<<*it2; } cout<<endl; } return 0; }
方法b.還可以使用vector< vector<int> > arr( ROW, vector<int>(COLUMN) );來指定二維陣列的行數和列數
#include<iostream> #include<vector> using namespace std; #define ROW 2 //行數 #define COLUMN 3 //列數 #define VALUE 1 //陣列元素值 int main() { vector<vector<int>> arr(ROW,vector<int>(COLUMN)); vector<vector<int>>::iterator it1; vector<int>::iterator it2; for(it1=arr.begin();it1!=arr.end();it1++) { for(it2=it1->begin();it2!=it1->end();it2++) { *it2=VALUE; } } cout<<"arr:"<<arr.size()<<endl;////輸出的為二維陣列的行數; for(it1=arr.begin();it1!=arr.end();it1++) { for(it2=it1->begin();it2!=it1->end();it2++) { cout<<*it2<<" "; } cout<<endl; } return 0; }
ps:既然這裡提到了二維陣列的建立方法,下面就順便貼出了普通二維陣列的建立方法
1.將二維陣列看成一維陣列進行處理
程式碼:
#include<iostream>
#include<vector>
using namespace std;
#define ROW 2 //行數
#define COLUMN 3 //列數
#define VALUE 1 //陣列元素值
//將二維陣列當成一維陣列來處理,因此普通二維陣列的記憶體分配是連續的
int main()
{
int a[ROW][COLUMN];
int *p=a[0];
int i,j;
for(i=0;i<ROW;i++)
for(j=0;j<COLUMN;j++)
p[i*COLUMN+j]=VALUE;
for(i=0;i<ROW;i++)
{
for(j=0;j<COLUMN;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
2.利用陣列指標
程式碼:
#include<iostream>
#include<vector>
using namespace std;
#define ROW 2 //行數
#define COLUMN 3 //列數
#define VALUE 1 //陣列元素值
//利用陣列指標建立動態二維陣列
int main()
{
int a[ROW][COLUMN];
int (*p)[COLUMN];//陣列指標,指向含有COLUMN個元素的一維陣列
int i,j;
p=a;
for(i=0;i<ROW;i++)
for(j=0;j<COLUMN;j++)
*(*(p+i)+j)=VALUE;
for(i=0;i<ROW;i++)
{
for(j=0;j<COLUMN;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}