C++基本语言:1.8vector类型

C++基本语言包含10章节内容,存于C++从入门到精通专栏

目录

一、vector类型简介

二、定义和初始化vector对象

(1)空vector

(2)元素拷贝的初始化方式

(3)初始化列表方法给初值,用 “{}”括起来。

(4)创建指定数量的元素

(5)多种初始化

三、vector对象上的操作

(1)判断是否为空empty(),返回布尔值。

(2)push_back

(3)size:返回元素个数

(4)clear:移除所有元素,将容器清空

(5)v[n]:返回v中的第n个字符

(6)赋值运算符(=)

(7)相等和不等(==和!=)

(8)范围for的应用

一、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)创建指定数量的元素

请注意,元素数量概念的初始化,用 的都是“()”

如果不给元素初值,那么元素的初值要根据元素类型而定,

  1.         例如元素类型为int,系统给的初值就是0
    1.         元素类型为string,系统给的初值就 是"",
      1.         但也存在有些类型,必须给初值,否则就会报错。

(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的容量,增 加、删除元素都不可以

请读者千万千万不要写出这种错误代码,否则隐 患无穷,切记切记!

相关推荐

  1. C语言从头学18——类型的自动转换

    2024-01-02 13:24:01       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-02 13:24:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-02 13:24:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-02 13:24:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-02 13:24:01       20 阅读

热门阅读

  1. 前端Vue日常工作中--Vue路由相关

    2024-01-02 13:24:01       30 阅读
  2. SpringBoot 中获取 Request 的四种方法

    2024-01-02 13:24:01       38 阅读
  3. C++ 值传递、引用传递、指针传递

    2024-01-02 13:24:01       37 阅读
  4. 【拼题A】2024跨年挑战赛

    2024-01-02 13:24:01       28 阅读
  5. 14、应用层优化

    2024-01-02 13:24:01       37 阅读
  6. 【DOCKER】详细介绍以及如何创建管理DOCKER

    2024-01-02 13:24:01       33 阅读
  7. Docker

    Docker

    2024-01-02 13:24:01      39 阅读
  8. docker的安装以及使用经验

    2024-01-02 13:24:01       37 阅读
  9. C++ 编程必备:对象生命周期管理的最佳实践

    2024-01-02 13:24:01       38 阅读
  10. vim 命令速记

    2024-01-02 13:24:01       38 阅读
  11. Stable Diffusion 本地部署详细教程

    2024-01-02 13:24:01       34 阅读
  12. Spring之TypeFilter

    2024-01-02 13:24:01       34 阅读
  13. vivado XDC优先级

    2024-01-02 13:24:01       36 阅读
  14. 姿态估计:DiffPose

    2024-01-02 13:24:01       43 阅读