二维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 }

结果如下:

posted @ 2020-04-28 11:24  和运气碰碰  阅读(9026)  评论(0编辑  收藏  举报