![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL
文章平均质量分 63
屠变恶龙之人
这个作者很懒,什么都没留下…
展开
-
stable_partition
partition(b,e,p) //分区(不稳定)stable_partition(b,e,p) //稳定分区,相对顺序不变。============实例1: 输入一个字符串(仅包含大小写),把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。bool isLower(char c) {原创 2017-03-28 15:14:44 · 291 阅读 · 0 评论 -
STL适配器
容器适配器特点用某种顺序容器来实现(让已有的顺序容器以栈/队列的方式工作)分类1) stack: 头文件 • 栈 -- 后进先出2) queue: 头文件 • 队列 -- 先进先出3) priority_queue: 头文件 • 优先级队列 -- 最高优先级元素总是第一个出列注:容器适配器上没有迭代器转载 2017-05-24 18:55:42 · 344 阅读 · 0 评论 -
STL容器
C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持。关联容器主要有map和set。map是key-value形式,set是单值。map和set只能存放唯一的key,multimap和multise转载 2017-05-24 18:41:51 · 265 阅读 · 0 评论 -
迭代器
一步一步认识C++STL中的迭代器 “ 指针 ” 对所有 C/C++ 的程序员来说,一点都不陌生。在接触到 C 语言中的 malloc 函数和C++ 中的 new 函数后,我们也知道这两个函数返回的都是一个指针,该指针指向我们所申请的一个 “ 堆 ” 。提到 “ 堆 ” ,就不得不想到 “ 栈 ” ,从 C/C++ 程序设计的角度思考, “ 堆 ” 和 “ 栈 ” 最大的区别转载 2017-04-19 16:22:51 · 366 阅读 · 0 评论 -
map
原理map的底层是一棵红黑树,在对节点的插入或是删除操作中,通过旋转来保持平衡性,最坏情况下的插入、删除、查找时间是O(logn)。通过map的迭代器不能修改其键值,只能修改其实值。所以map的迭代器既不是const也不是mutable。map和multimapmap和multimap将key和value组成的pair作为元素,根据key的排序准则自动将元素原创 2017-03-30 17:15:26 · 344 阅读 · 0 评论 -
STL容器线程安全
标准C++的世界是相当保守和精简的。在这个纯洁的世界,所有可执行文件都是静态链接的。不存在内存映射文件和共享内存。没有窗口系统,没有网络,没有数据库,没有进程。在这种情况下,当发现标准没有提到任何关于线程的东西时你不该感到惊讶。你对STL的线程安全有的第一个想法应该是这取决于STL的实现。 当然,多线程程序是很普遍的,所以大部分STL厂商努力使他们的实现在线程环境中可以正常工作。但转载 2017-04-05 16:50:29 · 460 阅读 · 0 评论 -
STL底层数据结构实现总结
1.vector 底层数据结构为数组 ,支持快速随机访问2.list 底层数据结构为双向链表,支持快速增删3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快 速增删,也支持随机访问转载 2017-03-30 17:53:06 · 437 阅读 · 3 评论 -
deque
原理deque采用一块map(不是STL的map容器)作为主控,其为一小块连续空间,其中每个元素都是指针,指向另一段较大的连续空间(缓冲区)。deque动态地以分段连续空间组合而成,随时可以增加一段新的连续空间并链接起来。不提供空间保留功能。(底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问)注原创 2017-03-30 17:47:31 · 288 阅读 · 0 评论 -
set
原理 set底层实现方式为RB树(即红黑树)。红黑树有什么性质?1)每个结点是红色或者黑色。2)根结点为黑色。3)叶结点为黑色的NULL结点。4)如果结点为红,其子节点必须为黑。5)任一结点到NULL的任何路径,所含黑结点数必须相同。相比于hash的优点 首先set,不像map那样是key-value对,它的原创 2017-03-30 17:01:48 · 272 阅读 · 0 评论 -
vector
底层原理 vector就是一个动态数组,里面有一个指针指向一片连续的内存空间,当空间不够装下数据时,会自动申请另一片更大的空间(一般是增加当前容量的50%或100%),然后把原来的数据拷贝过去,接着释放原来的那片空间;当释放或者删除里面的数据时,其存储空间不释放,仅仅是清空了里面的数据。自增长机制当已经分配的空间不够装下数据时,分配双倍于当前容量的存储区,把当前原创 2017-03-30 15:41:56 · 278 阅读 · 0 评论 -
list
原理 list是一个双向链表,以结点为单位存放数据,结点的地址在内存中不一定连续,每次插入或删除一个元素,就配置或释放一个元素空间。它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。也就是说,对于任何位置的元素插入或删除,list永远是常数时间。(优点:删除插入删除)list排序函数的排序原理将前两个原创 2017-03-30 16:11:53 · 389 阅读 · 0 评论 -
next_permutation
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件下面是以前的笔记与之完全相反的函数还有prev_permutation(1)int 类型的next_permutationint main(){int a[3];a[0]=1;a[1]=2;a[2]=3;do{cout0]" "1]" "2]}while (ne转载 2017-11-30 22:51:51 · 334 阅读 · 0 评论