随笔分类 -  C++ STL

摘要:1. 背景 快速排序虽然平均复杂度为O(N logN) 却可能由于不当的pivot选择,导致其在最坏情况下复杂度恶化为O(N2)。 另外,由于快速排序一般是用递归实现,过度的递归会带来过大的额外负荷,从而拉缓排序的速度。 堆排序经常是作为快速排序最有力的竞争者出现,平均时间上,堆排序的时间常数比快排 阅读全文
posted @ 2024-04-23 16:31 小熊酱 阅读(50) 评论(0) 推荐(0)
摘要:容器适配器,其就是将不适用的序列式容器(包括 vector、deque 和 list)变得适用。 STL 提供了 3 种容器适配器,分别为 stack 栈适配器、queue 队列适配器以及 priority_queue 优先权队列适配器。 容器适配器 基础容器筛选条件 默认使用的基础容器 stack 阅读全文
posted @ 2024-04-23 16:26 小熊酱 阅读(56) 评论(0) 推荐(0)
摘要:作为关联式容器的一种,map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括C++基本数据类型(int、double 等)、使用结构体或类自定义的类型。 与此同时,在使用 map 容器存储多个键值对时,该容器会自动根据各键值对 阅读全文
posted @ 2024-04-23 10:16 小熊酱 阅读(141) 评论(0) 推荐(0)
摘要:和 set 容器不同的是,multiset 容器可以存储多个值相同的元素。 multiset 容器类模板的定义如下所示: template < class T, // 存储元素的类型 class Compare = less<T>, // 指定容器内部的排序规则 class Alloc = allo 阅读全文
posted @ 2024-04-23 09:06 小熊酱 阅读(43) 评论(0) 推荐(0)
摘要:set 容器定义于<set>头文件,并位于 std 命名空间中。因此如果想在程序中使用 set 容器,该程序代码应先包含如下语句: #include <set> using namespace std; set 容器的类模板定义如下: template < class T, // 键 key 和值 阅读全文
posted @ 2024-04-22 16:50 小熊酱 阅读(149) 评论(0) 推荐(0)
摘要:C++ STL标准库提供了 pair 类模板,其专门用来将 2 个普通元素 first 和 second(可以是 C++ 基本数据类型、结构体、类自定的类型)创建成一个新元素<first, second>。 pair 类模板定义在<utility>头文件中,所以在使用该类模板之前,需引入此头文件。另 阅读全文
posted @ 2024-04-22 16:10 小熊酱 阅读(148) 评论(0) 推荐(0)
摘要:deque 和 vector 的最大差异一在于 deque 允许常数时间内对头端或尾端进行元素的插入或移除操作。二在于 deque 没有所谓的容量概念,因为它是动态地以分段连续空间组合而成随时可以增加一块新的空间并拼接起来。虽然 deque 也提供随机访问的迭代器,但它的迭代器和vector、lis 阅读全文
posted @ 2024-04-22 15:30 小熊酱 阅读(71) 评论(0) 推荐(0)
摘要:在 C++ 里,当我们调用 new 和 delete 进行对象的创建和销毁的时候,也同时会有内存配置操作和释放操作: 这其中的 new 和 delete 都包含两阶段操作: 对于 new 来说,编译器会先调用 ::operator new 分配内存;然后调用 Obj::Obj() 构造对象内容。 对 阅读全文
posted @ 2024-04-21 20:14 小熊酱 阅读(110) 评论(0) 推荐(0)
摘要:list 是一种双向链表。list 的设计更加复杂一点,好处是每次插入或删除一个元素,就配置或释放一个元素,list 对于空间的运用有绝对的精准,一点也不浪费。而且对于任何位置的元素插入或删除,list 永远是常数空间。 list 源码分成了两个部分,一个部分是 list 结构,另一部分是 list 阅读全文
posted @ 2024-04-21 16:57 小熊酱 阅读(48) 评论(0) 推荐(0)