STL学习总结

STL其实也不是什么高深的东西,如果会使用string类的话,可以提升你对STL的理解。

我的认为STL是一个模板,把功能都已经写好了,你只需要套用就Ok了。毕竟STL全称就是标准模板库。

我们学C++时,就知道它有面向对象和泛型编程的思想。STL目的就是提高复用性。

 

STL的基本概念

STL广义分为:容器、算法、迭代器

容器和算法通过迭代器进行链接

STL大体分为六大组件:容器、算法、迭代器、仿函数、适配器、空间适配器

img编辑

我就单独介绍一下容器和适配器:

img编辑

img编辑

迭代器在使用的时候类似于指针,我在理解的时候,就把他看做指针来用,这样方便理解。

img编辑

这些迭代器中比较常用的是双向迭代器和随机访问迭代器,这两个相较于其他的迭代器功能强大。

接下来进入容器的介绍,这些容器的构造都差不多,我就专注说明vector,其余的可以类推:

STL

vector

在理解上我把它看做一个数组,和数组的主要区别在于,vector可以动态扩展,但是数组是一个静态空间。如图所示:

img编辑

构造函数

分为默认构造和拷贝构造。

 

1.需要把vector类名调用才能使用这个容器,每一个容器有不同的类名。

2.默认构造,需要写明你用的是什么数据类型,我这用的是int。

3.我这个对象v1,调用函数,看上面的图,push_back,从数组后端插入。

三种遍历方式

1.第一种遍历方式:

v1.begin()起始迭代器,这个迭代器指向容器中第一个数据 v1.end()结束迭代器,这个迭代器指向容器元素的最后一个元素的下一个位置

 

1.使用迭代器,把数组的前端第一个元素和元素末端(不是最后一个元素),获取他们的位置(我个人认为)。

2.以指针的方式,去访问每一个元素。

这种方式遍历其实可以简化一下,把1的部分融入遍历里面,我以调用函数的方式来展示:

 

1.这个是引用

2.用for循环的方式,可以简化一下代码,思想和以前遍历是一样的,只是这里是指针。

 

第三种遍历方式:使用STL提供标准遍历算法 头文件algorithm,需要使用一个回调的技术,在此之前需要写一个函数进行输出

 

可以看出,特别的简略,其实使用的是algorithm里面的一个函数,写Print()的作用是进行一个调用(应该是仿函数的调用)。

 

其他的构造方式:

 

接下来说一下自定义数据类型和指针的存入。

自定义数据和指针

自定义数据:

 

1.自定义的部分

2.通过回调函数进行输出

 

指针:

 

1.使用指针

2.在这里开始解指针

 

赋值操作

 

容量和大小

 

插入和删除

 

这里插入和删除需要使用迭代器,我在这里演示一下:

 

迭代器只是提供一个位置信息,然后进入一个数据操作

数据存取

 

互换容器

 

互换容器,可以缩减空间的使用,比如你一开始申请10000的空间,只存入了3个数据,就造成空间的浪费,你使用互换容器,自己和自己互换,就可将空间变为3.

预留空间

 

deque

vector和deque差不多,但deque是两端开口的。

deque和vector差别在于:

 

其内部工作原理:

 

构造函数

 

赋值操作

 

大小操作

 

插入和删除

 

数据存取

 

排序

 

stack

把它看做栈就可以了

 

queue

把它看做队列就行

 

list

 

list是一个链式存储,STL里面的是双向循环链表

 

list的优点: ·采用动态存储分配,不会造成内存浪费和溢出 链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素 list的缺点: ·链表灵活,但是空间(指针域)和时间(遍历)额外耗费较大 List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的。 总结:STL中List和vector是两个最常被使用的容器,各有优缺点

构造函数

 

赋值和交换

 

大小操作

 

插入和删除

 

数据存取

 

反转和排序

 

set/multiset

我赶紧挺稀罕这个容器的,主要是他可以帮你排序,排序方法是从小到大,但是你也可以帮他规定排序顺序。

 

构造和赋值

 

大小和交换

 

插入和删除

 

查找和统计

 

排序方法

 

如果是自定义类型

 

pair

 

map/multimap

 

总结

我大部分的都是我课程学习的截图,因为和我开头说的一样,这些你只要懂一个vector,其余的就是附加在后面的知识点,区别的就是各个容器的功能。希望可以帮助大家,我后面会写一下我用STL的题目,帮大家理解。

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值