当前位置 : 主页 > 编程语言 > c++ >

C++ STL 知识小结

来源:互联网 收集:自由互联 发布时间:2021-06-23
qwq...接近联赛,就在这里对STL做一点知识小结吧,因为STL曾经失分很多。 简介 (来自Baidu) STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称。

qwq...接近联赛,就在这里对STL做一点知识小结吧,因为STL曾经失分很多。

简介

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

声明

每一个大标题下的某个容器,其名称和头文件相同。如queue/priority_queue的头文件是queue。

vector

vector可以理解一个不定长数组,内部基于倍增思想实现,在我们设置vector的时候,它申请的内存空间往往是我们设置的2倍,所以使用的时候要谨慎,爆空间就危险了。vector支持随机访问,就像数组一样,但不支持像链表一样O(1)插入,一般是在末尾增删。

操作函数:

size:返回此数组的实际长度。

empty:判断是否为空,为空则返回true。

(所有的STL容器都支持这两个方法,含义也相同)

clear:将vector清空。

迭代器声明:vector<int>::iterator

begin/end:指向vector中第一个/最后一个元素的迭代器。星号*则可解除引用。和指针的用法类似。

front/back:返回vector的第一个元素或最后一个元素。等价于*a.begin()/a[0]或*--a.end()/a[a.size()-1]。

push_back(x):将x插入到vector中成为最后一个元素。

pop_back:删除vector的最后一个元素。

vector的用处很多,比较经典常用的就是代替前向星存储树和图等结构。

queue

queue下主要包括了循环队列queue和优先队列priority_queue这两种操作。

循环队列queue

push(x):将x插入队尾,O(1)操作。

pop:将对头的元素出队。

front/back:O(1)访问队头/队尾元素。

循环队列可用于优化最短路算法,适用SPFA和Dijkstra。

优先队列priority_queue

可以把优先队列理解成一个大根二叉堆。

push(x):把元素x插入堆中。

pop:删除堆顶元素。

top:查询堆顶元素,也就是队列中的最大值。

小根堆priority_queue

每次我们插入一个元素,把这个元素的相反数插入优先队列中。这样一来,绝对值小的反而在堆顶,用一种巧妙的方法来实现小根堆。

deque

双端队列deque是一个支持在队列头尾入队/出队的很妙的结构,基本上所有操作都是神仙O(1)。

front/back:访问队头/队尾元素。

push_back(x)/push_front(x):从队尾/队头入队x。

pop_back/pop/front:删除队头/队尾元素。

clear:清空队列。deque除了这个操作是O(n)其他都是O(1)。

begin/end:返回首部/尾部迭代器。

[]:deque可以像vector或者普通数组一样支持下标随机访问,仍然是O(1)。

网友评论