和數組一樣,數組有二維的數組,vector也有二維的vector。下面就介紹一下二維vector的使用方法。
一般聲明初始化二維vector有三種方法
(1) vector< vector<int> > v(n,vector<int>(m)); //在聲明的時候就一次性指定vector內外層的大小;特別注意 > >之間是有空格的
上面語句構造了一個二維向量,它有n個元素,每個元素都是含有m個int型元素的一維向量;並且二維向量中每行的長度都是相等的(每行元素個數相同)
(2) 上面介紹的方法是一次性指定了二維vector的內外層大小的方法,並且每行大小都相同,那如果要求每行的長度不同怎么辦呢? 可以用如下方法:
vector< vector<int> > v; //先聲明一個二維向量
v.resize(n); //先根據需要指定外層大小
for(int i=0,len;i<n;i++) //在指定了外層大小后,接着再遍歷指定內層每行的大小,此時每行的長度可以不同
{
cin>>len;
v[i].resize(len);
}
(3) 還可以用push_back()來添加每行,例如
vector< vector<int> > v; //先聲明一個二維向量
for(int i=0,m;i<n;i++) / /添加n行,假設n已初始化
{
cin>>m;
push_back(vector<int>(m)); //往v里添加行,行的大小為m;vector<int>(m)也可以改成vector<int>(m,1),即用1來初始化每行
}
另外說一下,vector<int>(m,0);這個括號里面可以沒參數,但是括號卻不能省略
此時 v.pop_back() 是用來刪除最后一行的,v.size()返回的是v的行數。
總的來說,二維向量的屬性和一維向量是相同的,它們的用法也都一樣,下面用代碼展示了一下上面三種方法的具體用法:
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 int main() 5 { 6 int n=0,m=0; 7 vector<vector<int> > v1(2,vector<int>(3)); 8 vector<vector<int> > v2,v3; 9 v2.resize(3); //指定v2有3行 10 cout<<"輸入v2每行大小,共有三行:"; 11 for(int i=0;i<v2.size();i++) 12 { 13 cin>>m; 14 v2[i].resize(m); //指定v2每行的大小 15 } 16 cout<<"輸入v3每行大小,共有四行:"; 17 for(int i=0;i<4;i++) //向v3里面添加四行 18 { 19 cin>>m; 20 v3.push_back(vector<int>(m)); //往v3里添加行,行的大小為m 21 } 22 cout<<"--------------------\n"; 23 24 cout<<"給v1賦值\n"; 25 for(int i=0;i<v1.size();i++) //給v1賦值 26 { 27 for(int j=0;j<v1[i].size();j++) 28 cin>>v1[i][j]; 29 } 30 cout<<"給v2賦值\n"; 31 for(int i=0;i<v2.size();i++) //給v2賦值 32 { 33 for(int j=0;j<v2[i].size();j++) 34 cin>>v2[i][j]; 35 } 36 cout<<"給v3賦值\n"; 37 for(int i=0;i<v3.size();i++) //給v3賦值 38 { 39 for(int j=0;j<v3[i].size();j++) 40 cin>>v3[i][j]; 41 } 42 cout<<"--------------------\n"; 43 44 cout<<"v1的大小:"<<v1.size()<<"\n"<<"v1中的元素:\n"; 45 for(int i=0;i<v1.size();i++) //打印v1 46 { 47 for(int j=0;j<v1[i].size();j++) 48 cout<<v1[i][j]<<" "; 49 cout<<"\n"; 50 } 51 cout<<"\nv2的大小:"<<v2.size()<<"\n"<<"v2中的元素:\n"; 52 for(int i=0;i<v2.size();i++) //打印v2 53 { 54 for(int j=0;j<v2[i].size();j++) 55 cout<<v2[i][j]<<" "; 56 cout<<"\n"; 57 } 58 cout<<"\nv3的大小:"<<v3.size()<<"\n"<<"v3中的元素:\n"; 59 for(int i=0;i<v3.size();i++) //打印v3 60 { 61 for(int j=0;j<v3[i].size();j++) 62 cout<<v3[i][j]<<" "; 63 cout<<"\n"; 64 } 65 66 v1.pop_back(); //用pop_back()刪除最后一行 67 v2.pop_back(); 68 v3.pop_back(); 69 70 cout<<"-------刪除最后一行后再打印---------\n"; 71 cout<<"v1的大小:"<<v1.size()<<"\n"<<"v1中的元素:\n"; 72 for(int i=0;i<v1.size();i++) //打印v1 73 { 74 for(int j=0;j<v1[i].size();j++) 75 cout<<v1[i][j]<<" "; 76 cout<<"\n"; 77 } 78 cout<<"\nv2的大小:"<<v2.size()<<"\n"<<"v2中的元素:\n"; 79 for(int i=0;i<v2.size();i++) //打印v2 80 { 81 for(int j=0;j<v2[i].size();j++) 82 cout<<v2[i][j]<<" "; 83 cout<<"\n"; 84 } 85 cout<<"\nv3的大小:"<<v3.size()<<"\n"<<"v3中的元素:\n"; 86 for(int i=0;i<v3.size();i++) //打印v3 87 { 88 for(int j=0;j<v3[i].size();j++) 89 cout<<v3[i][j]<<" "; 90 cout<<"\n"; 91 } 92 return 0; 93 }
結果如下:
還想再補充一下,不管是一維的還是二維的vector,凡是在指定好vector的大小以后,系統一般會自動將它初始化,默認初始化為0,下面驗證一下:
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 int main() 5 { 6 int n=0,m=0; 7 vector<vector<int> > v1(2,vector<int>(3)); 8 vector<vector<int> > v2,v3; 9 v2.resize(3); //指定v2有3行 10 cout<<"輸入v2每行大小,共有三行:"; 11 for(int i=0;i<v2.size();i++) 12 { 13 cin>>m; 14 v2[i].resize(m); //指定v2每行的大小 15 } 16 cout<<"輸入v3每行大小,共有四行:"; 17 for(int i=0;i<4;i++) //向v3里面添加四行 18 { 19 cin>>m; 20 v3.push_back(vector<int>(m)); //往v3里添加行,行的大小為m 21 } 22 cout<<"--------------------\n"; 23 24 cout<<"v1的大小:"<<v1.size()<<"\n"<<"v1中的元素:\n"; 25 for(int i=0;i<v1.size();i++) //打印v1 26 { 27 for(int j=0;j<v1[i].size();j++) 28 cout<<v1[i][j]<<" "; 29 cout<<"\n"; 30 } 31 cout<<"\nv2的大小:"<<v2.size()<<"\n"<<"v2中的元素:\n"; 32 for(int i=0;i<v2.size();i++) //打印v2 33 { 34 for(int j=0;j<v2[i].size();j++) 35 cout<<v2[i][j]<<" "; 36 cout<<"\n"; 37 } 38 cout<<"\nv3的大小:"<<v3.size()<<"\n"<<"v3中的元素:\n"; 39 for(int i=0;i<v3.size();i++) //打印v3 40 { 41 for(int j=0;j<v3[i].size();j++) 42 cout<<v3[i][j]<<" "; 43 cout<<"\n"; 44 } 45 return 0; 46 }
結果如下: