首页
学习
活动
专区
工具
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为缺省情况下的底部结构。

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

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

    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为缺省情况下的底部结构。

    44930

    小王职场记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/

    59200

    【c++】STL简介

    本篇文章,博主将系统地介绍STL的相关概念以及学习方法,提升大家对STL的认识,帮助大家更好地踏入STL的大门。...SGI版本 由Silicon Graphics Computer Systems,Inc公司开发,继承自原始版本。...被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程风格上看,可读性非常高。 目前最被广泛应用的版本是微软参与研发维护的P.J.版本和被Linux采用的SGI版本。...后续我们深入学习STL时,博主主要参考SGI版本的源代码进行讲解。...为了帮助大家深入学习STL,博主在这里推荐一本参考书籍:侯捷老师的《STL源码剖析》(华中科技大学出版社) 总结 本篇文章博主和大家分享了STL的概念、组成和重要性,以及如何学好STL

    12310

    【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

    47000

    通过一篇文章让你了解STL是什么

    STL 前言 一、什么是STL 二、STL的版本 原始版本 P. J....版本 RW版本 SGI版本 三、STL的六大组件 四、STL的重要性 试题 面经 五、如何学习STL 六、STL的缺陷 前言 STL(Standard Template Library)是C++编程语言的一个标准库...SGI版本 由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。...被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们学习STL要阅读部分源代码,主要参考的就是这个版本。...STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。 五、STL的缺陷 STL库的更新太慢了。

    46511

    【C++篇】走进C++标准模板库:STL的奥秘与编程效率提升之道

    在接下来的博客中,我们会逐步了解 STL 的基本概念、其核心组件以及如何在实际项目中高效使用 STL。请记住,掌握 STL 是每一个 C++ 开发者迈向高级编程的必经之路。 第一章: 什么是STL?...SGI STL 源代码 - 参考经典 SGI 版本的 STL 实现。第二章: STL的版本与演进 2.1 不同的STL版本 STL 经过了多个版本的发展,每一个版本都对 C++ 社区产生了深远的影响。...SGI 版本:由 Silicon Graphics 计算机系统公司开发的版本,被 GCC(Linux 编译器)广泛采用。...SGI 版本具有极佳的可读性和可移植性,我们学习 STL 时主要参考该版本的实现。 2.2 STL的影响与重要性 STL 在编程界的重要性无法被低估。...阅读源码:建议阅读 STL 的源码,尤其是 SGI 版本的 STL 代码,以加深对 STL 内部实现的理解。 应用到项目中:将 STL 应用到自己的项目中,解决实际问题。

    16110

    【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版本。

    56530

    STL相关简介

    SGI版本 由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版本。...被GCC(Linux)采用,可移植性好, 可公开、修改甚至贩卖,从命名风格和编程风格上看,阅读性非常高。(我们主要就这个版本进行参考!!) 3....STL的六大组件 主要由仿函数,算法,迭代器,空间配置器,容器,配接器构成: 4. STL的重要性 SLT在笔试与面试中占据着举足轻重的地位,是我们日后发展的重要组成。...如何学习STL 学习STL的过程就好比是一个婴儿蹒跚学步到健步如飞的过程。 简单总结一下:学习STL的三个境界:能用,明理,能扩展 。 6.STL的缺陷 1. STL库的更新太慢了。 2....STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。 3. STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。 4.

    13110

    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

    32440

    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下对有些迭代器失效引发的问题处理并不会这么严格,就好像下面这种情况:  该情况也是属于迭代器失效,虽然程序没有崩溃,

    17330

    【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才进一步更新。

    15010

    走进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

    2K30

    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 服务端多线程网络应用程序。

    7.6K11
    领券