首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

来看看栈和队列不为人知的一面

SGI STL 由Silicon Graphics Computer Systems公司参照HP STL实现,被Linux的C++编译器GCC所采用,SGI STL是开源软件,源码可读性甚高。...接下来介绍的栈和队列也是SGI STL里面的数据结构, 知道了使用版本,才知道对应的底层实现。 来说一说栈,栈先进后出,如图所示: ?...我们常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的低层结构。 deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了。...SGI STL中 队列底层实现缺省情况下一样使用deque实现的。...队列中先进先出的数据结构,同样不允许有遍历行为,不提供迭代器, SGI STL中队列一样是以deque为缺省情况下的底部结构。

29610
您找到你想要的搜索结果了吗?
是的
没有找到

栈与队列:来看看栈和队列不为人知的一面

SGI STL 由Silicon Graphics Computer Systems公司参照HP STL实现,被Linux的C++编译器GCC所采用,SGI STL是开源软件,源码可读性甚高。...接下来介绍的栈和队列也是SGI STL里面的数据结构,我们一般使用的STL也是SGI STL,知道了使用版本,才知道对应的底层实现。 来说一说栈,栈先进后出,如图所示: ?...「我们常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的低层结构。」 deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了。...「SGI STL中 队列底层实现缺省情况下一样使用deque实现的。」...队列 先进先出的数据结构,同样不允许有遍历行为,不提供迭代器, SGI STL中队列一样是以deque为缺省情况下的底部结构。

42230

小王职场记STL(2)std:sort解析

上篇文章回顾: 小王职场记 谈谈你的STL理解(1) ---- std:sort代码解析 开始 看一段代码会有什么问题。...版本 gcc 使用 4.8.4 版本, STL源码 在 Linux 系统的位置是:/usr/include/c++/4.8.4/bits (79个文件) 目录: 小王职场记 谈谈你的STL理解(1...(3, 5); 算法部分 代码: stl_algo.h std:compare: Effective STL: Item 21:永远让比较函数对相同元素返回false std:sort(5行代码) template...2000年6月,SGI的C++标准模板库的stl_algo.h中的不稳定排序算法采用了Musser的内省排序算法。在此实现中,切换到插入排序的数据量阈值为16个。...在递归过程中,如果递归层次过深,使用堆排序来处理 复杂度 参考 http://feihu.me/blog/2014/sgi-std-sort/

34100

【C++】STL 模拟实现之 vector

2、扩容机制 vector 的扩容机制和 string 的扩容机制是一样的,因为它们都是动态增长的数组:VS 下大概是 1.5 被扩容,Linux g++ 下是标准的二倍扩容,测试用例如下: void...我们在 【STL简介 – string 的使用及其模拟实现】 中对 STL 做了一些基本的介绍,知道了 STL 由原始版本主要发展出了 PJ、RW 和 SGI 版本,其中,微软的 VS 系列使用的就是...PJ 版,但是由于其命名风格的原因,我们阅读源码时一般选择 SGI 版,而且 Linux 下 gcc/g++ 也是使用的 SGI 版本,再加上侯捷老师有一本非常著名的书 《STL源码剖析》也是使用的 SGI...://www.aliyundrive.com/s/pnwMuB9uwEN vector 的部分源码如下: //vector.h #ifndef __SGI_STL_VECTOR_H #define __...SGI_STL_VECTOR_H #include #include #include #ifdef __STL_USE_NAMESPACES

44900

【C++】vector的模拟实现(SGI版本)

下面是SGI版本的stl_vector.h的源码实现,我们模拟实现的就是SGI版本的源码。...对于这种问题的解决,可以将size_t换成int类型,或者将10强转为size_t类型,但stl源码的解决方式并非是这样的,而是利用了函数重载来解决了这个问题,多重载了一个类型为int的构造函数。...erase删除任意位置代码后,linux下迭代器并没有失效,因为空间还是原来的空间,后序元素往前搬移了,it的位置还是有效的,但是在vs下就会直接报错,所以对于erase之后迭代器是否失效的这一讨论,为了保证程序良好的移植性...= v.end()) { v.erase(it); } //读 cout << *it << endl;//PJ版实现的非常复杂,相对于SGI版本。

52130

C++空间配置器

目录 1.什么是空间配置器 2.为什么需要空间配置器 3.SGI-STL空间配置器实现原理 3.1一级空间配置器 3.2二级空间配置器 3.2.1内存池 3.2.2 SGI-STL中二级空间配置器设计...3.SGI-STL空间配置器的实现原理 以上提到的几点不足之处,最主要还是:频繁向系统申请小块内存造成的。那什么才算是小块内 存?...SGI-STL采用了内存池的技术来提高申请空间的速度以及减少额外空间的浪费,采用哈希桶的方式来提高用户获取空间的速度与高效管理。...3.2.2 SGI-STL中二级空间配置器设计 SGI-STL中的二级空间配置器使用了内存池技术,并且为了更方便更好的管理内存,二级空间配置器采用了哈希桶的方式。...; typedef malloc_alloc single_client_alloc; #else // 二级空间配置器定义 #endif 在SGI_STL中该宏没有定义,因此:默认情况下SGI_STL

28740

【C++】STL学习之旅——初识STL,认识string类

1 STL 简介 现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽。...主要分为这几个版本:HP STLSGI STL、STLport、PJ STL、Rouge Wave STL 等 其中我们需要重点学习的是SGI版本: SGI版本由Silicon Graphics...被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。...学习STL 要阅读部分源代码,主要参考的就是这个版本 2 STL怎么学习 网上有句话说:“不懂STL,不要说你会C++”。...(程序员的尽头是英语) 3 STL缺陷 STL库的更新太慢了。这个得严重吐槽, 上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。

9510

走进STL - 空间配置器,STL背后的故事

1、何为“空间配置器” a、为何需要先了解空间配置器 从使用STL层面而言,空间配置器并不需要介绍,所以我的“走近STL”系列中并没有它的位置。...但若是从STL实现角度出发,空间配置器确实首要理解的。 作为STL设计背后的故事,空间配置器总是在默默地付出着。...b、SGI STL专属空间配置器 SGI STL 的空间配置器与众不同,且与STL标准规范不同,其名为alloc,而非allocator。...SGI STL allocator未能符合标准,不过这并不会给我们造成困扰,因为我们没什么事儿不会自己去配置这个。而SGI的每一个容器都已经预设好了alloc。...STL标准规则告诉我们,配置器定义于之中,SGI的内含以下两个文件: #include //负责内存空间的配置与释放 #include

1.8K30

STL】vector的使用

1.2、vector的数据结构 在SGI版本的STL中,vector的数据结构非常简单,就三个迭代器,以start和finish分别指向空间的头和已使用的尾,以end_of_storage指向整块空间的尾端...我们可以来验证一下:  2.2.4、vector默认扩容机制 我们还可以通过如下代码,来观察vs下以及linux下vector的默认扩容机制。...(vs使用PJ版本的STLlinux中g++使用SGI版本的STL,进行对比) void TestVectorExpand() { size_t sz; vector v; sz =...如下所示:  2.3.2、关于迭代器失效问题 我们知道,迭代器就是用一个对象来模拟指针行为(++、--),从而实现对容器元素的访问(*解引用)(string与vector在SGI版本下的迭代器就是指针本身...这里简单举几个例子:  VS下对于任何迭代器失效的处理,是直接报错,但是Linux下对有些迭代器失效引发的问题处理并不会这么严格,就好像下面这种情况:  该情况也是属于迭代器失效,虽然程序没有崩溃,

14130

STL简介

,可读性比较差,阅读困难,其中以sgi stl的可读性最好,侯捷先生专门写了一本书>剖析stl的源代码,他所用的源代码就是本资源的代码。     ...有趣的是,对于STL还有另外一种解释--STepanov & Lee,前者是指Alexander Stepanov,STL的创始人;而后 者是Meng Lee,她也是使STL得以推行的功臣,第一个STL...>> Scott Meyers的> 侯捷的> 二、STLsgi(Silicon  Graphics Computer System,Inc) 版本...大家可以从SGI的网站上下载其写的STL版本,网址为:http://www.sgi.com/tech/stl/download.html,另外我在程序员联合开发网上也下载了一个相关的版本,网址为:http...://www.pudn.com/downloads86/sourcecode/compiler/detail330720.html,著名的STL三大库之一,SGI_TL的源代码,极具研究价值!

1.3K20

值得学习17个CC++ 超经典开源项目

下载地址:http://redis.io/ Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。...另一方面,最近的操作系统,例如Linux 最新版的内核源代码据说超过了1000 万行。就算不是初学者,想完全理解全部代码基本上也是不可能的。...主页:http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio.html SGI STL SGI STLSTL代码的经典实现版本,虽然很多编译器不直接使用这个版本...主页:https://www.sgi.com/tech/stl/download.html Muduo muduo 是一个基于 Reactor 模式的现代 C++ 网络库,它采用非阻塞 IO 模型,基于事件驱动和回调...,原生支持多核多线程,适合编写 Linux 服务端多线程网络应用程序。

4.3K11

STL之空间配置器

SGI-STL空间配置器实现原理 以上提到的几点不足之处,最主要还是:频繁向系统申请小块内存造成的。...SGI-STL以128作为小块内存与大块内存的分界线,将空间配置器其分为两级结构,一级空间配置器处理大块内存,二级空间配置器处理小块内存。...SGI-STL采用了内存池的技术来提高申请空间的速度以及减少额外空间的浪费,采用哈希桶的方式来提高用户获取空间的速度与高效管理。...3.2.2 SGI-STL中二级空间配置器设计 SGI-STL中的二级空间配置器使用了内存池技术,但没有采用链表的方式对用户已经归还的空间进行管理(因为用户申请空间时在查找合适的小块内存时效率比较低),...因此:SGI-STL将用户申请的内存块向上对齐到了8的整数倍 ?

37630

STL】string的使用

放在专栏【C++知识总结】,会持续更新,期待支持 STL简介 STL的诞生 STL为英文Standard Template Library的缩写,译为标准模板库。是C++标准库的重要组成部分。...STL具有多个版本:HP版本、P.J.版本、RW以及SGI版本,由于SGI版本在命名风格以及编程风格方面可读性更佳,所以后续一些学习都将参考该版本。...VS与Linux扩容策略对比 如果细心的话,就会发现,我们在VS中进行扩容时,一开始时数据存放在15大小的_buf数组中,后来在扩容超过该数组空间时,才又开辟额外空间。...当数据大于15时,先2倍扩容,后续再进行扩容时以1.5倍进行扩容 Linux扩容策略 不存在buf数组,默认空间大小为0 从1开始,严格遵守2倍扩容 实际上VS的策略更加合理一些,因为实际中string...而Linux频繁的扩容,会导致内存碎片问题,因此VS策略会更加合理一些。另外,我们在使用string时,如果能提前计算出所需要的空间,直接reserve提前扩容,会提高一定的运行效率。

13630

【C++】了解一下STL

SGI版本 由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。...被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。在后面学习STL要阅读部分源代码,主要参考的就是这个版本。 3....STL的六大组件 STL包含六大组件,分别是: 容器(Containers):容器是STL中最重要的组件之一。它提供了各种数据结构(如数组、链表、堆、映射等),用于存储和组织数据。...STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。 5. 如何学习STL 简单总结一下:学习STL的三个境界:1....STL的缺陷 STL库的更新太慢了。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。 STL现在都没有支持线程安全。

7710

【C++】STL 标准模板库 ③ ( STL 容器简介 | STL 容器区别 | STL 容器分类 | 常用的 STL 容器 )

一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型的 STL 容器 的区别 主要是 节点 和 节点之间的关系模型 不同 ; 容器的内存空间是否连续 : 向量...插入到中间 , 插入到首部 , 插入到尾部 ; 容器中的元素移除限制 : 是否允许 移除中间元素 , 移除首部元素 , 移除尾部元素 ; 数据结构 主要是 研究 节点 与 节点 之间关系的 ; 2、STL...容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers , 容器中每个元素的位置都是固定的 , 元素的位置取决于插入元素的...Set , 多重集合 MultiSet , 映射 Map , 多重映射 MultiMap 是 关联式容器 ; 如下图所示 , 关联式容器的元素位置与特定规则有关 , 与插入时间和位置无关 ; 3、常用的 STL...容器 常用的 STL 容器 : 向量 vector : 是连续存储的元素 , 其内存是连续的 ; 可以 访问和修改任意元素 , 但在 序列尾部 进行 插入 和 删除时 , 具有常量时间复杂度 ; 需导入

20730
领券