STL
学无止境丶
https://github.com/fwdhz998。深度学习的副产品就是广度学习。
展开
-
STL之heap相关用法
#include #include #include using namespace std;int main(){ int ia[9] = { 0, 1, 2, 3, 4, 8, 9, 3, 5 }; vector ivec(ia, ia + 9); //底层我们使用vector来实现,可以动态添加元素。 make_heap(ivec.begin(), ivec.end()原创 2017-02-10 15:34:48 · 256 阅读 · 0 评论 -
vector内存管理
1 注意,所谓动态增加大小,并不是在原空间之后接续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此,对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就失效了,特别小心。扩充空间:重新配置,移动数据,释放原空间。特别注意:迭代器失原创 2017-04-07 10:56:35 · 365 阅读 · 0 评论 -
list容器的特殊sort()算法:非递归--归并排序
std::list::sort() 非递归--归并排序背景:list容器不能使用STL算法sort(),必须使用自己的sort()成员函数。因为STL算法sort()只接受随机存储迭代器。注:侯捷说的quick sort,我觉得有误。这里没有体现出快排分而治之的思想。比如我们的list里有如下几个需要排序的元素:21,45,1,30,52,3,58,原创 2017-04-08 15:25:52 · 799 阅读 · 0 评论 -
单链表的快速排序
单链表的特点是:单向。设头结点位head,则最后一个节点的next指向NULL。如果只知道头结点head,请问怎么将该链表排序? 设结点结构为[cpp] view plaincopystruct Node{ int key; Node* next; };转载 2017-04-08 15:39:55 · 887 阅读 · 0 评论 -
deque的构造与内存管理
deque与vector的差异:1 deque允许于常数时间对头端进行插入或移除操作2 deque没有容量(capacity)观念,因为它是以动态地分段连续空间(中控器)组合而成3 deque避免了“重新配置、复制、释放”的轮回,代价则是复杂的迭代器架构。迭代器++:切换至下一个元素,如果已达所在缓冲区的尾端,就却换至下一节点(即下一缓冲区)的第一个元素。原创 2017-04-09 11:25:12 · 2232 阅读 · 0 评论 -
严重不安全:STL map 使用map[key]==0判断key是否存在于map中
题目描述现在我们需要查出一些作弊的问答社区中的ID,作弊有两种:1.A回答了B的问题,同时B回答了A的问题。那么A和B都是作弊。2.作弊ID用户A和作弊ID用户B同时回答了C的问题,那么C也是作弊。已知每个用户的ID是一串数字,一个问题可能有多个人回答。输入描述:每组数据第一行为总问题数N(N小于等于200000),第二行开始每行一个问题,第一个数字为提问人ID,第二个数字为回原创 2017-04-12 15:16:58 · 10167 阅读 · 1 评论 -
priority_queue的底层实现及数组建堆。
stack与queue注意事项:1 stack不允许有遍历行为,stack也不提供迭代器。SGI STL便以deque作为缺省情况下stack底部结构,称之为adapter(配接器)2 除了deque之外,list也是双向开口的数据结构3 queue与stack的情况类似,不提供迭代器,也可以以list作为底层容器,默认为deque。priority_queue的底层实现—原创 2017-04-10 21:15:07 · 4255 阅读 · 1 评论 -
SGI STL内存配置策略
SGI 空间配置与释放的设计哲学:1.向 system heap要求空间2.考虑多线程(multi-threads)状态3.考虑内存不足时的应变措施4.考虑过多“小型区块”可能造成的内存碎片(fragment)问题。考虑到小型区块可能造成的内存破碎问题,SGI设计了双层级配置器。SGI STL第一级配置器 当配置区块超过128 bytes,直原创 2017-04-05 11:37:57 · 339 阅读 · 0 评论 -
Traits编程技法——STL源代码门钥
traits编程技法大量运用于STL实现品中。它利用“内嵌型别”的编程技巧与编译器的template参数推导功能,增强C++未能提供的关于型别认证方面的能力。一.获取迭代器所指向的类型型别:1 利用函数模板的参数推导机制,导出型别2 但,“模板参数推导机制”只能推出参数的类型,无法推导函数的返回值类型3 回返类型加上关键词typename,用于告诉编译器这是一个函数原创 2017-04-06 19:37:57 · 390 阅读 · 0 评论