1. 程式人生 > >C++中二維動態陣列的建立

C++中二維動態陣列的建立

方法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;
}