1. 程式人生 > >C++ 之 Vector(容器)初始化高維陣列

C++ 之 Vector(容器)初始化高維陣列

使用C++標準模版庫(STL)中的Vector(向量)可以實現變長陣列,實現二維陣列,高維陣列。下面給出程式碼實現。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int len;
cin>>len;
vector<int> array(len);//宣告變長陣列
for(int i=0;i<len;i++)
array[i]=i;
cout<<array[i]<<"\t";
return 0; 
}


那麼用vector(向量)怎樣實現二維陣列呢,下面給出源程式:
#include <iostream>  
#include <vector>  
#include <iomanip>  
using namespace std;  
int main()  
{  
int i,
j,  
m, //行數  
n; //列數    
cout << "input value for m,n:";  
cin>>m>>n;     
//注意下面這一行:vector<int後兩個">"之間要有空格!否則會被認為是過載">>"。  
vector<vector<int> > vecInt(m, vector<int>(n));    
for (i = 0; i < m; i++)  
for (j = 0; j < n; j++)  
vecInt[i][j] = i*j;   
for (i = 0; i < m; i++)  
{  
for (j = 0; j < n; j++)  
cout<<setw(5)<<vecInt[i][j]<<":"<<setw(9)<<&vecInt[i][j];  
cout<<endl;  
}  
return 0;  
}  


這裡Vector中元素的記憶體的地址分配也有同雙指標實現的二維陣列有同樣的特點。不過用Vector的方法比使用雙指標簡單地多,分配記憶體空間時會更安全,陣列初始化程式碼也更簡單。以下是一個變長三維陣列:
#include <iostream>  
#include <vector>  
#include <iomanip>  
using namespace std;  
int main()  
{  
int i,  
j,  
k,  
m, //一維座標  
n, //二維座標  
l; //三維座標  
cout << "input value for m,n,l:";  
cin>>m>>n>>l;  
vector<vector<vector<int> > > vecInt(m, vector<vector<int> >(n, vector<int>(l)));    
for (i = 0; i < m; i++)  
for (j = 0; j < n; j++)  
for(k = 0; k < l; k++)  
vecInt[i][j][k] = i+j+k;   
for (i = 0; i < m; i++)  
{  
for (j = 0; j < n; j++)  
{  
for(k = 0; k<l; k++)  
cout<<setw(5)<<vecInt[i][j][k]<<":"<<setw(9)<<&vecInt[i][j][k];  
cout<<endl;  
}  
cout<<endl;  

return 0;  
}