《STL源码剖析》学习笔记(一):编译器与STL版本

最近在学习侯捷老师的《STL源码剖析》,这本书很老了,里面使用的例程在我的IDE上无法运行(我的IDE是CodeBlocks),查找了许多博客了解各种编译器与STL版本的相关知识,记录在这篇笔记中。

编译器

我们现在使用的CodeBlocks、Visual Studio、DEV-C++都是IDE(集成开发环境),提供了三个主要组件:源代码编辑器(Editor)、编译器或解释器(Compiler / Interpreter)和调试器(Debugger)。
关于编译器和解释器的区别,请查看这位朋友的博客关于编译器与解释器的区别
这篇博客里解释了C++是需要编译器而不是解释器的一种语言,那么C++的编译器有哪些呢?
《STL源码剖析》里提到了g++(GNU C++),首先需要明确的是g++是在linux环境下使用的,书中使用的编译平台是cygnus 2.91 for Windows,下载地址在这里,这款软件我的理解就是它创建了一个类似linux的环境,然后内置了g++编译器,借助这个软件可以像在Linux终端中使用g++那样在Windows中使用g++,但是我没找到编辑界面,所以我用记事本写了程序,然后修改后缀.txt为.cpp,像这样:
在这里插入图片描述
然后打开cmd,进入到这个文件的存放位置,然后g++编译:
在这里插入图片描述
用这种方式就可以对书中的例程进行实验了。这个软件中的STL源码存放在C:\cygnus\cygwin-b20\include\g++中。
我打开了codeblocks的文件夹,发现了MinGW,然后又在这篇博客当中了解了cygwin和mingw的区别,我的理解是mingw是把程序中使用Linux的东西改写为同样操作的Windows的东西,然后内置的编译器是gcc/g++,我在这个目录下找到了源码C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits

STL版本

书中提到,HP(惠普)版本是STL实现版本的始祖(想想惠普当年多牛,现在感觉就剩下打印机了 ,唉!),然后Visual C++使用的是P.J.Plauger版本,Visual C++现在都是集成在Visual Studio当中了,我了解的貌似它的编译器是cl.exe,可以运行这个然后cl XXX.cpp来进行编译,我用不太习惯VS,我的破电脑运行VS会卡;C++Builder使用Rouge Wave版本的STL;g++使用SGI版本的STL,注意,书中提到GCC指的是GNU Compiler Collection(GNU 编译器集合),包括了g++和gcc。

困惑的答案

然后回到我最开始困惑的地方,为什么我用CodeBlocks无法编译书中的例程,既然同样是内置g++编译器,cygwin和mingw会影响语法吗?我又打开两款软件的g++源码进行比较,的确不一样,比如宏定义,比如STL的实现方式,我在CodeBlocks的源码中看到了三个copyright,如下:
Copyright © 2001-2015 Free Software Foundation, Inc.
Copyright © 1994 Hewlett-Packard Company
Copyright © 1996,1997 Silicon Graphics Computer Systems, Inc.
所以这一份STL是在SGI版本的基础之上再进行更新改良的,貌似可以称作GNU ISO C++库版本。

以上内容是我的个人理解,如果有不对的地方希望大家可以告诉我。《STL源码剖析》应该是学习C++必读书目,我读完一遍受益匪浅,但是忘得也快,所以打算重新阅读,以博客的形式把自己的理解整理记录,书中的STL版本也许是过时的,但是它内在的原理是不变的,愈久弥新,读来虽然费劲,但引用古月老师的一句话,“怕什么真理无穷,进一寸有一寸的欢喜”,共勉。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
侯捷的《STL源码剖析》是一本关于STL(标准模板库)的学习笔记。这本书深入解析了STL的实现原理和设计思路,对于理解STL的内部机制和使用方法非常有帮助。这些学习笔记记录了作者在学习侯捷的《STL标准库和泛型编程》课程时的心得和总结,对于理解STL源码和进行泛型编程都具有指导意义。 这本书涉及了STL的各个模块,包括容器、迭代器、算法等,并解释了它们的实现原理和使用方法。通过学习这本书,你可以更好地理解STL的底层实现和使用技巧。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STLSourceAnalysis:stl原始码剖析(侯捷)的学习笔记](https://download.csdn.net/download/weixin_42175776/16069622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [候捷老师STL源码剖析视频课程笔记](https://blog.csdn.net/weixin_46065476/article/details/125547869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [侯捷——STL源码剖析 笔记](https://blog.csdn.net/weixin_45067603/article/details/122770539)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值