C++基本语言:1.8vector类型
一、vector类型简介
vector类型是一个标准库中的类型,代表一个容器、集合或者动态数组这样一种概念。
既然是容器,那就可以把若干个对象放到里面。当然,这些对象的类型必须相同。
可以把一堆int型数字放到vector 容器中去
复杂点说,可以把一堆相同类型的类对象放到vector容器中去。
要想使用这种类型,需要在.cpp源文件开头包含vector头文件: std::vector
定义一个vector类型对象。显然,一旦定义出来,这个对象就是容器了。例如想在里面保存int型数据(容器里面所要装的元素类型)
“<>”里面是int,表示这个vector类型 的对象(容器)里面存放的是int型对象(int型数据/元素)
在后面章节中会讲到“类模板”的概念,其实vector就是一个类模板,这里的“<>”实际上是类模板的一个实例化过程。
换一种容易理解的方式:? ?
vector理解成一个残缺的类类型,光有类名vector还不够,还需要额外给vector类模板提供其要在其中保存什么类型数据的信息,这个信息就是通过<int>来提供
所以,在使用vector时,一定要在它后面跟一对 “<>”并在其中跟一个该vector容器中要保存的数据(元素)类型的信息,这才算一个完整的类型(完整的类类型)。
vector不是一个完整类型,而vector<int>却是一个完整的类型。
一般来讲,vector容器里面可以装很多种不同类型的数据作为其元素 (容器中装的内容简称“元素”)。
但是vector不能用来装引用。请记住,引用只是一个别名,不是一个对象。不是对象,不能忘vector里面放
二、定义和初始化vector对象
(1)空vector
可以往这个容器的末尾增加一些数据。
可以使用vector的 成员函数push_back往容器末尾增加数据。注意看它的下标[0],[1],[2],…不断增长
实验效果:
(2)元素拷贝的初始化方式
在vector对象元素类型相同的情况下,进行vector对象元素复制(新副本)。
(3)初始化列表方法给初值,用 “{}”括起来。
在C++11中,还可以用初始化列表方法给初值,这个时候用 “{}”括起来。
当然“{}”里面为空也可以,那就相当于没有初始化,是一个空的 vector了。
(4)创建指定数量的元素
请注意,有元素数量概念的初始化,用 的都是“()”
如果不给元素初值,那么元素的初值要根据元素类型而定,
- ????????例如元素类型为int,系统给的初值就是0,
- ????????元素类型为string,系统给的初值就 是"",
- ????????但也存在有些类型,必须给初值,否则就会报错。
- ????????元素类型为string,系统给的初值就 是"",
(5)多种初始化
“()”一般表示对象中元素数量这种概念, “{}”一般表示元素的内容。这种概念,但又不是绝对。
倒数第二个vector<int>i4{10,1}等同于初始化列表
结论就是:要想正常通过“{}”进行初始化,那么“{}”里面的值类型得跟 vector后边的“<>”里面的元素类型相同。否则,“{}”里面提供的值就无法作为元素初始值’
三、vector对象上的操作
在使用vector时,最常见的情况是并不知道vector里会有多少个元素,使用时会根据需要动态地增加和减少。
一般来讲,使用者是先创建一个空的vector对象,然后通过代码向这个vector里增加或减少元素。vector上很多的操作和string很相似。
(1)判断是否为空empty(),返回布尔值。
(2)push_back
一个非常常用的方法,用于向vector末尾增加一个元素。
(3)size:返回元素个数
(4)clear:移除所有元素,将容器清空
(5)v[n]:返回v中的第n个字符
v[n]:返回v中的第n个字符(n是一个整型值),位置从0~.size()-1,如果下标引用超过这个范围,或者用下标访问一个空的vector,都会产生不可预测的结果(因为编译器可能发现不了这种错误)。
(6)赋值运算符(=)
(7)相等和不等(==和!=)
两个vector对象相等:元素数量相同,对应位置的元素值也都相同。 否则就是不相等。
(8)范围for的应用
和讲解string时对范围for的应用类似。
结果是 2 4 6 8 10;第二个for也可以用引用
如果在范围for中,增加改变vector容量的代码,则输出就会变得混乱
虽然有结果,但结果不可预测;
auto vecitem 每次循环相当于重新定这个变量
因为每次执行for循环,都会重新定义vecitem,并且把它的值初始化成vecvalue序列中的下一个值。
在刚刚进入这个for循环时,在系统内部 会记录序列结束的位置值(上面如5),但一旦在这个范围for里面改动这个序列的容量(如增加/删除元素),那么这个序列结束的位置值就肯定会发生改变,这个改变会导致for语句的混乱,其输出的值也就乱了。
结论:在for语句中,不要改变vector的容量,增 加、删除元素都不可以。
请读者千万千万不要写出这种错误代码,否则隐 患无穷,切记切记!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!