二维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<<"--------------------
";
23 
24     cout<<"给v1赋值
";
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赋值
";
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赋值
";
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<<"--------------------
";
43 
44     cout<<"v1的大小:"<<v1.size()<<"
"<<"v1中的元素:
";
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<<"
";
50     }
51     cout<<"
v2的大小:"<<v2.size()<<"
"<<"v2中的元素:
";
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<<"
";
57     }
58     cout<<"
v3的大小:"<<v3.size()<<"
"<<"v3中的元素:
";
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<<"
";
64     }
65 
66     v1.pop_back();  //用pop_back()删除最后一行
67     v2.pop_back();
68     v3.pop_back();
69 
70     cout<<"-------删除最后一行后再打印---------
";
71     cout<<"v1的大小:"<<v1.size()<<"
"<<"v1中的元素:
";
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<<"
";
77     }
78     cout<<"
v2的大小:"<<v2.size()<<"
"<<"v2中的元素:
";
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<<"
";
84     }
85     cout<<"
v3的大小:"<<v3.size()<<"
"<<"v3中的元素:
";
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<<"
";
91     }
92     return 0;
93 }

结果如下:

二维vector的使用第1张

 还想再补充一下,不管是一维的还是二维的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<<"--------------------
";
23 
24     cout<<"v1的大小:"<<v1.size()<<"
"<<"v1中的元素:
";
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<<"
";
30     }
31     cout<<"
v2的大小:"<<v2.size()<<"
"<<"v2中的元素:
";
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<<"
";
37     }
38     cout<<"
v3的大小:"<<v3.size()<<"
"<<"v3中的元素:
";
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<<"
";
44     }
45     return 0;
46 }

结果如下:

二维vector的使用第2张

免责声明:文章转载自《二维vector的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇layui在open弹出层回显,解决动态select数据回显问题云上RDS架构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

类的加载过程(类的生命周期)详解

3.1. 概述 在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。 按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段: 其中,验证、准备、解析3个部分统称为链接(Linking) 从程序中类的使用过程看 大厂面试题 蚂蚁金服...

L3-002 特殊堆栈 (30分) vector容器的模拟、vector容器的一些用法

vector容器的简单应用,我们可以用vector维护一个有序数组,每次对要插入的数用upper_bound或者lower_bound来 为这个数找一个应该插入到vector的位置。另外再找一个数组来维护插入数的顺序,来面对pop操作 在从小到大的排序数组中, lower_bound( begin,end,num):从数组的begin位置到end-1位置...

提高Vector容器的删除效率

vector容器是类似与一个线性数组,索引效率高,插入,删除的效率很低,需要遍历数据列表,一般情况下vector的删除操作由一下函数完成: iterator erase(iterator position) //删除一个位置 iterator erase(iterator first, iterator last)...

iOS开发中 类、对象、实例变量、成员变量、属性变量等区别和关系

类(class):具有相同属性和行为等同一类元素等总称,类是一个抽象的概念。 区分是类还是对象,看它能否继续被细分。 在OC中,类是表示对象类型的结构体,对象通过类来获取自身的各种信息。类由两个部分组成:*.h和*.m文件组成。 *.m文件中 implemention部分是类的实现部分,内部包含类中的各种信息,包括各种实例方法或类方法。 类别( categ...

spring boot 中用@value给static变量赋值

需求:改写一个JedisUtils,工具类,所以最好用静态方法和变量。 @value("${redis.host}") private static String redisHost; 运行后发现注入失败。解决办法:看了网上大家的说法,有用中间变量的,有用set方法赋值的。试了一下都是可以成功赋值的, 以下引用别人的代码: 给参数注入,执行set方法(这里...

android 在子线程中使用handler更新界面

1. 在子线程中创建一个handler对象,让这个handler对象获取主线程的looper,这样才能把这个handler中的消息发送到ui线程的消息队列中 下面这个界面当点击updateui按钮就会创建一个对象然后调用它的更新图片和文字的方法,这两个设置方法在子线程中执行。 在更新界面的对象的类中创建一个handler对象,在初始化的时候给他赋值为Lo...