二維vector的使用


    和數組一樣,數組有二維的數組,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 }

結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM