STL-Vector容器详解(一)

首先恭喜各位来到STL的世界

首先让我们看看STL中最最最常见的容器Vector

参考 cppreference:https://zh.cppreference.com/w/cpp/container/vector
讲解说明:我会按照网站上的顺序结合自己的理解挑重点讲解

  1. 主体及其介绍

Vector在逻辑上是一个动态的数组,它自带一个智能的检测系统,只要检测到容量满了就自动扩充,它会找一个新的几乎两倍于之前容量的连续的存储空间。

使用Vector之前,我们会引入头文件Vector
图中我们可以清晰的看到Vector是一个模板类;其中模板类有两个类型参数,T(也就是Vector的类型),Allocator(分配器的类型,一般使用的话,不需要在意分配器;仔细观察发现分配器有一个默认值)

  1. 成员函数

成员函数是我们使用的主体

  • [构造函数 ] 构造函数是用来初始化容器的函数

这是参数的含义,请自行对照函数参数


这里的构造函数是将count个value初始化进Vector容器
第二个无value版本,将使用value默认值

第一个构造函数将[first,last)的元素赋给vector 注意first、last都是vector的迭代器
第二、三构造函数都是将另一个叫other的vector复制过来做初始化 区别是第二个函数分配器将跟随other的分配器,第三个函数可以自行选择分配器,并且分配器类型有默认值

请仔细观察前两个函数和上图后两个函数的区别
细心的同学会发现一个是&,另一个是&&,有啥区别?
一个是引用,另一个是左值引用,也就是可以使用移动构造函数和移动赋值函数,简单地说就是other直接把自己的东西给了我们要初始化的vector容器,没有数据拷贝带来的空间和时间损耗,其余自行科普

第一和第二个函数都是上述 第二个函数的noexcept是不需要检测异常的意思
第三个函数用initializer_list初始化,它及其类似列表初始化,但是不一样

简易版科普描述

  • [operator=] 赋值运算符

  • [ assign]


和operator=都是赋值的意思,是对operator=的补充

3.元素访问

  • at、operator[]:类似数组的[]

    这俩及其类似,唯一区别就是at函数越界之后抛异常

  • front、back

  • data

    或许是为了尽量完美的模拟数组,诞生了这个函数

再次恭喜各位,耐心的看完了我拙略的文章

全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务