<span>STL 技巧整理 7/22</span>

STL

STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL是C++的一部分,因此不用安装额外的库文件。

STL 目录一览

  • vector
  • queue
  • priority_queue
  • deque
  • set
  • map

vector

变长数组,内部基于倍增思想。
声明
#include <vector>
vector<int> a;
vector<int> b[250];
struct node{...};
vector<node> c;
size/empty

size 返回的是已知vector的长度,empty返回bool,判断是否为空。

clear

清空。。。

迭代器

类似于指针,用’*'解除引用。
声明方式

vector::iterator it;

begin/end & front/back

begin/end :望文生义,返回第一个元素与最后一个元素的迭代器
front/back : 返回第一个元素与最后一个元素的数值
遍历方式
1.

	for(int i = 1;i <= a.size(); i++) printf("%d ", a[i];
	for(vector<int>::iterator it = a.begin();it != a.end(); it++) {
		printf("%d ", a[i]);
	}
push_back() & pop_back()

向最后一位插入元素, 或删除元素。


#include < queue>

声明

queue<int> q;
struct res{...}; queue<res> q;
priority_queue<int> q;
struct res{...}; priority_queue<res> q;

queue

循环队列

函数 作用 实例 时间复杂度
push 入队(从队尾) q.push(val) O ( 1 ) O(1) O(1)
pop 出队(从队头) q.pop() O ( 1 ) O(1) O(1)
front 队头元素 int x = q.front O ( 1 ) O(1) O(1)
back 队尾元素 int y = q.front O ( 1 ) O(1) O(1)

priority_queue

优先队列 —>大根堆

函数 作用 实例 时间复杂度
push 把元素插入堆 q.push(val) O ( l o g n ) O(log n) O(logn)
pop 删除堆顶 q.pop() O ( l o g n ) O(log n) O(logn)
top 查询堆顶元素(最大值) int x = q.top O ( 1 ) O(1) O(1)

#include < deque>

双端队列 = vector + queue

函数 作用 实例 时间复杂度
[] 随机访问 同vector O ( 1 ) O(1) O(1)
begin/end 头尾迭代器 同vector O ( 1 ) O(1) O(1)
front/back 头尾元素 同queue O ( 1 ) O(1) O(1)
clear 清空 q.clear $O(n)

另一些望文生义的函数
push_back/push_front
pop_front/pop_back

#include <set>

set

声明
set<int> s;
struct res{...}; set<res> s;
size/empty/clear

与vector的相关函数相似。
时间复杂度 O ( 1 ) O(1) O(1)

迭代器

set的迭代器是一个双向访问迭代器,不支持随机访问,但可以使用’*'解除引用,并且只支持’++'与‘–'两个运算符。

迭代器声明
set<int>::ioerator it;
begin/end

返回首尾元素的迭代器

insert

插入元素。
注意 set与数学中的集合相似,不包含重复的元素,如果插入的元素已经存在,则不会重复操作。时间复杂度 O ( l o g n ) O(log n) O(logn)

遍历方式
set<int> s;
for(int i = 1;i <= n; i++) s.insert(a[i]);
for(set<int>::ioerator it = s.begin(); it != s.end(); it++) {
	printf("%d ", *it);
}
find / lower_bound & upper_bound

在set集合中寻找一个等于x元素,返回迭代器,如果寻找不到,则返回s.end()。
lower_bound :寻找 ≥ x的元素中最小的一个
upper_bound:寻找>x的元素中最小的一个

erase

删除迭代器it所指向的元素

count

返回set中等于x的元素个数

#include < map>

map是对于 k e y v a l u e key - value keyvalue的映射, k e y key key v a l u e value value可以为任意的类型。

size/empty/clear/begin/end
同前
迭代器
是一个双向访问器。

map<key, value>::iterator it = m.begin();
it->first --- key;
it->second --- value;

find
f i n d ( x ) find(x) find(x) 为在map里寻找以 x x x k e y key key的迭代器,如果没有就返回 m . e n d ( ) m.end() m.end()

全部评论

相关推荐

2025-11-21 22:25
门头沟学院 HTML5
我是个没天赋的人,努力学习也只考上了个一本,家里条件也不怎么样。大一玩了一年,没怎么学技术,也没有卷绩点,全在游戏小说抖音中度过。大二上接触了牛客,看到了许多优秀的同龄人。很多双非的同学,甚至不少学院本的同学都进了大厂实习。我把他们作为榜样,决定好好学习。我每天都至少学八九个小时,很多次都想要放弃,想哭,我都坚持了下来。我总是告诉自己,只要努力,就一定能有好的结果。这几个月过的很累,但也很充实。转眼就到大二下了,我决定去找实习了,但是学校的认可度让我感到心底发凉,明明和广工这种知名双非分差不多,结果总被问是不是公办本科。两个月投了一千份实习,只有四个面试,最终去了个中小厂实习。结果就是改了两个月bug,虽然mt人挺好,但是实在学不了什么东西,所以就离职开始面试。凭借这段实习,确实多了不少中小厂面试,但是大厂依旧没有面试机会。除了字节腾讯所有大厂都投了,结果依旧是0面试。最终有幸获得美团的面试机会,面试也幸运的通过,然后入职了。为了省钱坐十几个小时硬座到北京,到北京的第一天,由于太激动想要租房,结果被坑了2600,之前实习的地方,房东也故意不退押金,加起来总共损失3000多。虽然很难过,但是我还是忍受了下来,我想着实习才刚开始,会好起来的。实习了大半个月,跟学校这边沟通一直不成功,我每天都寝食难安,精神都快崩溃了,经常凌晨两三点才睡着,想要跳楼。最后迫于无奈,我一大早我坐高铁回去,恳求院主任给我一个机会,我怎么恳求讲理都没用,甚至都磕头下跪了,还是没用。院主任一点机会都没给我,连让我跟各科老师沟通机会都不给,要不休学要不辞职。我没得选择,这段实习我看的比我的生命还重要,这不仅是我这大半年的心血,更是未来的一份希望。我只能休学,我想着现在好好实习,多学点技术,到时候秋招早点拿到offer,然后再补这学期的课也不是不行。但是,现实总是事与愿违。这三个月说实话并没有学到什么东西,前一个月很闲,这两个月事很多,每天基本都是九点后下班,但都是杂活。产出都是靠我看文档加上代码写上去的。我真的很想锻炼一下技术,但是总是不尽人意。三个月了,我到现在都还没做过一个像样点的需求。产出是能编,但有破绽不说还没锻炼到技术。我好想真正的做一下需求啊,我好想真正的走完一遍流程,去上线一次啊。接下来两个月,我不知道该怎么坚持下去了,现在每天都想哭,很焦虑,很难受。冒着将来可能延毕的风险,我赌上了一切,结果输的这么彻底,可能我就只是个小丑吧。如果家庭好点就不用卷了,如果我聪明一点就能上个好学校了,如果大一有人带我,我就不会摆烂了,如果院主任给我个机会,我就不用这么苦了,如果我实习能有机会好好锻炼自己,我就不用这么难受焦虑了。但是没办法,我又能怎么办呢,无非是咬紧牙关罢了,毕竟没人能够帮助我,只能靠自己我可真是个小丑啊
HasonoCell:你很棒了bro....其实我看网上休学一年的人很多的也都顺利毕业了,真的不用特别焦虑这个事。另外实习也是,有一段大厂实习已经比很多很多人厉害了,跟你一届的很多人现在估计都没意识到未来的压力呢,实习就算没产出也不用特别焦虑,好好总结一下已经做过的事情,然后趁着休学这年继续冲一下,要相信未来会有好结果的。你应该也挺眼熟我的,我之前字节横向挂的时候也是难过的不行,觉得自己好没用,结果百度出乎意料的offer了,很多事其实都很顺其自然,认真做事,好结果也许就在下个路口等着你。 很喜欢的一句话是:木已成舟。不要老是沉浸在过去的遗憾中无法自拔噢,要努力过好当下。 好好休息一下吧,辛苦了,你已经很棒了噢
点赞 评论 收藏
分享
2025-12-19 21:53
门头沟学院 Java
想做OpenGL:不要一来就把自己定位这么低吧,把大厂当成目标,不断去学技术做项目,最后你至少能学到能找到中小厂的技术水平,你一上来就找这种两千块还要前后端都会的,其实对你用处不会很大,真去了也是打杂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务