C++STL-《算法笔记》同步笔记总结与补充

专题要点:

STL容器体现C++功能强大之处,提高编程效率,提高程序的正确率,对编程者极为友好,是“偷懒”的好方法。
常用的STL容器有vector,set,map,string,queue,stack,array,list,pair等,各自有各自的初始化方法,访问方法,添加删除方法。由于知识点比较琐碎,个人借此总结一下。

用途:

此处重点强调是功能和性能

vector:当需要高效随机访问,不在乎插入删除元素的效率时使用

1、作为数组使用,当元素个数不确定时可以节省空间
2、作二维数组,当每行元素个数不相等时,使用vector存放效果很好(在遍历和访问时)
3、使用vector代替链表,实现邻接表
优点:可以随机访问,与数组相比获取大小size()和判空empty()更加方便
缺点:内部插入删除效率不高,一般在末端添加删除元素

list:当需要大量在任意位置插入删除元素,不关心随机访问的效率时使用(只能双向顺序访问)

优点:由于其是链式结构,因此可在常量时间内任意位置插入删除元素
缺点:只能顺序用迭代器访问,并快速访问开头和末尾,占用的空间较vector大

deque:是vector和list的折中,只能在两端增删,可随机访问

优点:两端插入删除元素,支持随机访问
缺点:访问速度比vector慢,在中间插入不如list

array:元素个数固定,可随机访问

1、与普通数组相比开销较小
2、当需要快速获得size(),判空empty()时,较为方便(但vector也能实现)

set:

当题目需要去重并排序时,考虑使用(去重和排序的功能可以根据需要使用不同的set容器)

map:

map是比较高级的数组,可以存储映射各种类型的数据(尤其是对于字符类型的数据)
PS:set与map的插入删除,查找性能差别不大,均会自动按键排序,因此二者的选择主要取决于功能上而非性能上

string:

1、string与char数组相比,较为灵活,内部函数较为丰富,运算符重载后使用起来更加方便
2、string速度较慢,只能cin读取

queue:

1、bfs配合队列容器效果更佳
2、对于一些需要对数据重复使用的题目,使用过数据后,再次入队,以等待下一次使用
3、一些贪心问题,可以使用优先队列

stack:

1、模拟递归(目前尚未碰到)
2、一些经典问题:逆波兰式,括号匹配,序列输出顺序

pair:

一个小容器,方便对map进行初始化

几点注意:

1、只有vector和string可以使用迭代器加一个常数来进行访问
2、只有vector,string,array,deque可以使用下标访问, 后两者还可通过 at(下标)访问
3、各个容器使用size(),empty(),erase(),clear(),基本一致
4、添加元素push(),push_back(),push_front(),insert(),emplace(), emplace_back(),emplace_front()
5、删除元素:pop(),pop_back(),pop_front(),remove(),erase(),clear()
6、访问函数:top(),front(),back(),find(),count()
7、algorithm头文件中的swap()与sort()也可以对容器使用
8、当数据使用结构体,配合STL容器时,容器中其实没有必要存整个结构体,可以只存结构体数组的下标,按照散列的方式进行查找对应的结构体变量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值