推荐一些学C++的书

本人已有C++基础,现在想提升标准C++,麻烦知道的人推荐一些提高标准C++的书。还有一些有关C++项目的网站,谢谢了
最新回答
浅笑等壹个晴天

2024-07-28 01:31:03

这是某个网友的工作总结,很适合你的。

掐指一算工作也已经十个月了,再过两个月就算是我合理度过工作一年的门槛,这一年学到了什么,错过了什么,很值得在新的一年开始的时候反思及总结一下,不然未来可能会更加盲目。。。。
回想起2008年刚刚出来找工作的时候,仅仅是学了《C++ Primer》一书,并且看过《Programming With MFC》的前面大部分章节,竟然找工作很顺利:)因为好像大部分纯粹是从学校出来的毕业生,哪怕是科班出生的,因为教材即教育方式的限制,甚至都还不知道什么叫标准库-_-!我没有夸张,这是我工作后了解到的现实,也是与一些后来在读大学生交流后才知道的。所以,虽然我当时感觉自己知道的并不多,但是实际上公司却发现我似乎懂得很多:)

刚开始的计划:作为电子通信专业出来,但是最后走向纯粹软件行业的我,知道自己的不足,对于基础知识的掌握太过薄弱,可能会限制自己将来的发展,我一开始工作就知道的。我并不认为起步阶段,在我们公司,更熟悉得一些C++语法能够是一辈子的优势,这些在工作一年以后都会成为泡沫。。。。所以这刚开始的时候,其实我给自己定下了一些目标:
1. 首先当然是继续学习好C++,争取把找工作前读了一半的《Effective C++》读完,另外应该再接再厉将《More Effective C++》和《Effective STL》读完。
2. 数据结构及算法部分我一直认为是自己最最欠缺的,因为毕竟大学学的“软件技术基础”课程和真正的计算机专业相差太远,所以我一直以来认为自己起码在开始的一年中补上,定的计划是学习完Weiss《数据结构与算法分析 C++描述》和《算法导论》一书。
3. 当时刚开始进公司,是分配到网络游戏服务器小组的,一开始自己就对服务器方面能开发网络程序抱有兴趣,学习网络方面的知识自然也在计划之中,当时的设想是在Windows方面学习《Win32多线程编程》,Linux方面学习《Unix环境高级编程》,《TCP/IP详解》第一卷,《Unix网络编程》第一卷的。
以上就是我为自己一年工作后应该学习的东西。。。。。。。。到现在回头看看,感慨颇多,因为虽然一年期限只剩下2个月了,其实还有太多太多事情没有做。

计划的未完成:第1步的书我仅仅只看完了《Effective C++》。。。。因为当时买的都是原版书,所以看完《Effective C++》都是硬着头皮上的,后来好像总感觉精力不足,没有勇气看下去了,或者是自己感觉有更多更重要的事情需要去做,所以就没有继续了。
第2步我一直认为很重要,中途的确也开始学习过,就在前段时间,我不仅仅是看Weiss《数据结构与算法分析 C++描述》一书,并且还附带同步阅读侯捷的《STL源码剖析》一书,最最绝的是,因为刚学完好几种语言,我当时是尝试用各种语言去实现书上的算法和数据结构的。但是学习完了二叉树部分以后,我的工作转到了反外挂上面,因为的确比较喜欢这样底层的工作,所以大部分工作后的时间(本来就不多)都自己去弄汇编去了,数据结构的学习也就中断了。
第3步,除了《Win32多线程编程》一书我的确是从头到尾看过了,《Unix环境高级编程》当时是安排在公司利用吃饭的间隙和下午休息时间看的,但是仅仅是看了个开头,然后我的工作从服务器组换到了客户端去了,公司此时服务器紧张,唯一的一台Linux服务器也分配给了网络方面去做数据库去了,我在公司甚至一台可以登陆的Linux服务器都没有,所以作罢,当书从公司带到家里来后,因为当时家里也有别的学习计划,所以中断了。《TCP/IP详解》第一卷一书TCP,UDP部分因为刚开始做服务器时,在总监的指导下(其实就是给我用工作时间来看),大概看过了,《Unix网络编程》第一卷也是出于同样的原因我看过了利用套接字编写简单的TCP,UDP程序部分,其他的后来都没有看。
总而言之,从计划的完成角度上来看,我这一年是及其失败的,因为似乎该看的都没有看。。。该学的都没有学。但是回过头来看,其实计划一开始指定的时候是我刚刚开始工作,懂得并不多的时候,很多时候我的学习并没有怠慢,仅仅是因为工作中碰到感觉自己更感兴趣,或者是觉得更有作用的知识,所以学习方向有所偏差了。

计划不如变化:的确后来发生的事情是计划不如变化了-_-!因为第一个实际的工作并不是和网络有关的,所以刚开始工作时网络知识的学习中断了,看过我以前的总结的人就会知道,我来公司做的第一个事情就是一个“未控制异常Dump系统”我也不知道该怎么描述这个工作,也许用英文更能表达,“Error Dump”。在做这个工作的时候总监为了让我理解SEH,所以拿出他的《Windows核心编程》给我看,看完此章节后,我如获至宝,感觉此书非读不可,好书就是好书,哪怕我仅仅是突然读了12章节,都会觉得欲罢不能,所以,最后我从网上购得此书,完全学过!受益良多!在此推荐一下此书^^

在看此书的这个时候我的第2个工作内容也正如火如荼的进行,基本上那时候在公司我就看《Windows核心编程》在家我就看《Effective C++》,我的第2个工作(不是换公司哦,仅仅是换了内容)是做一个文件系统,一个这么大的东西给我一直当时刚参加工作不到一个月的家伙,说明公司的确还看的起我,我一直这么认为:)其实这个文件系统的修补及优化一直是贯穿与我这一年的工作的-_-!直到最近还有个莫名奇妙的非必出Bug还没有解决-_-!

就是在这个工作中我第一次写概要设计,详细设计等设计文档,并开始自己设计并编码完成一个独立的模块,对于这些知识的重要,在现在看来,怎么评价都不过分,这是我非常非常感谢公司的地方,能够在一开始就给了我这样重要的机会,当时还趁着公司的需要,学习了一下软件工程方面(当时甚至不理解什么叫需求-_-!)的和UML方面的知识。这些我也是感觉受益良多。对于这么一个比较大的系统,我自己对怎么编码才能够在后期能够很好的改动维护也慢慢的有了一些想法,特别是对于OO思想的领悟感觉上了一个台阶。毕竟我刚开始工作的时候,还谈不上任何成型的思想的,仅仅是懂C++语法而已。
接下来的工作很有意思,我得将我在Windows下写的文件系统移植到Linux下面去,这期间我开始在工作中真正的接触Linux(以前读书的时候仅仅是玩Linux,其实牵涉到编程的很少),这期间虽然工作中因为原有的框架很成型,并没有太多的需要我学习的地方,但是我还是学习了一下Makefile的编写,g++的使用,并且再一次的用上了Vim,呵呵,当时那样用Putty登上服务器编写的模式,除了Vim我似乎没有别的选择。但是此时我还是勉强的适应Vim而已。此时也大概的了解了一下哪些函数可能是MS扩充的,哪些是ISO的,哪些是POSIX的,起码对于这些概念都有了了解,以后也不至于编写可移植程序还使用Win32 API的错误:)
最最有意思的是,在客户端弄了这么久,服务器已经暂时不需要我了,于是我继续在客户端方面工作,包括一个游戏TrayIcon功能,外置聊天窗口,这是对于GameUI方面的知识有所了解。然后是为游戏引擎分析并选择一个最佳的XML解析器,再然后是为游戏底层类创建,添加了一个工厂模式。其实那时也还没有理解XML到底是什么用的,为什么我们游戏需要那么麻烦速度又不快的配置,那时候也不明白优化的过程中其实使用的是重构的思想,也不明白工厂模式这样的设计模式到底有什么功能,仅仅是参考CEGUI的实现硬生生的照搬了一套。但是说实话,不是这次的经历,在第二次再碰到设计模式相关的知识需要时,我也不会下定决心,最后读完了一整本原版GOF的《设计模式》一书。。。。
再后来的工作就更有意思了,客户端总监叫我好好的看看Lua方面的知识,方便为客户端添加一套脚本系统。这时真是变化太快,这些知识完全脱离了计划,因为公司能够让我用整天整天的工作时间来看书,我无论是上班还是下班都在看书,整整学习完了一本《Programming in LUA》,对于脚本语言的特性理解受益匪浅,对于LUA这样的为嵌入式而生的脚本语言更加是了解了更多。此时虽然因为公司考虑到因为游戏已经快要完成,此时添加这样的脚本系统不再合适,所以使用Lua的工作中断,但是我对脚本语言的兴趣并没有中断,我接下来不仅没有放弃LUA的学习,甚至想起来接着学完以前学过又中断的Python,看完了《Python核心编程》一书。学完Python后对于脚本语言的兴趣更加是无法收拾了,对于Python语法的优美感叹不已,库的丰富更加是五体投地。这也是后来我能够教女朋友去学Python的原因:)这和当年教她学习C简直就是两种体验-_-!

Python学习告一段落后,也一直没有使用机会,然后处于对Linux的兴趣,我开始独自摸索,我通过看完一本《Bash高级编程》学习了Bash,这是我学习的第3个脚本语言,但是说实话,感觉Bash是3个里面最难的,-_-!但是就是对Bash的学习,让我感觉Linux不再是繁复的操作系统,一切通过Bash来完成,很多时候能够比图形界面更加快,更加有效,这是实实在在的进步,因为以前在命令行中老是重复的敲代码,快烦透了,学了Bash以后我也开始知道什么叫“懒惰的程序员”了,那就是能够自动化操作的绝不自己一步一步操作:)再加上学习Lua,Python,Bash时都能统一用到的Vim编辑器,我对Vim的使用已经从勉强没有办法的适应到了没有Vim没有办法生存的地步。对于这么一个刚开始复杂到吐血,到用熟了极大的享受的工具,也让我慢慢有了一些思想,能够节省我时间的工具,我总是愿意去花时间学习,因为无论其多复杂,学习曲线再长,学会了还是受益无穷的!这对于我后来提高工作效率,愿意花时间去学习任何看起来能够对我有帮助的工具起到了决定性的作用!要知道,很久以前的我是语言至上,工具仅仅是工具,没有什么技术含量,谁不能学的思想!这个时候我才慢慢领悟到总监所说“工欲善其事必先利其器”的思想!于是我愿意花时间去学习Total Command提高我平时管理文件,操作文件的效率,去学习Visual Assist去提高我编码的效率,去学习AQTime以提高我profile的效率,学习DevPartner以提高开发后Test的效率,学习SoftIce, OllyDbg, IDA Pro去提高我反汇编的效率,这些都和我使用Vim从勉强到离不开的经历有关!
再到了后来我写了一个日志服务器,用以记录游戏运行时候的数据,虽然用到了MySQL C API,但是我竟然一直没有想过好好地去重新学习SQL和MySQL的使用,这是我工作以来的第一次-_-!工作中碰到,然后自己没有去好好深入学习的东西可能就是数据库了,包括后来我再次用到了SQL Sever时,我还是没有深入去学习。
然后开始完成工作中最大规模的系统,游戏服务器的监控系统,对于一个这样包含了监视,控制等操作的大型系统,设计来管理公司将来所有运行的服务器,而此系统几乎我是一人独立设计编码完成的!初期的概要设计阶段,由我设计监控点端,由一同事设计监控中心,到了后来,除了监控的前段界面不是我做的,我一人全部包揽其他所有部分的设计及编码工作。
此工作让我对于一个系统整体的理解,设计,以编码实现的思想提高,怎么评价也不过分。其中最有意思的一个插曲是在监控点一端我用到了状态机模式,也就是这样,老总推荐了我一本书去看GOF的《设计模式》,虽然他仅仅是叫我去看看状态机模式,并完成工作,但是按照本人的工作惯性,最后还是将整本《设计模式》23个设计模式完全看完,呵呵,只可惜,从那以后好像一直没有再开发一个系统的工作可以做了,所以学到的东西都还在肚子里面没有办法发挥。
再后来通过做一个内存管理模块,对于号称C/C++最大的缺陷,内存管理部分有了一定的了解,但是这个工作由于比较仓促,说实话,最后的了解实在有限。但是对于我后来去看《STL源码剖析》最最前面的内存分配器方面的内容帮助不小,对于此号称很难的部分理解起来几乎全无困难。
再到后来,我开始做工具-_-!这是最无聊的工作,虽然是优化,但是我几乎重做,这里我需要反思,因为我无规模概念的将本来可以短时间内完成的工作用了很长时间才完成,但是我在此时对于优化C++代码的一些问题慢慢在脑海中形成。并且在这段时间中我按照原有计划,开始学习数据结构的知识。
再接下来,我更进一步的去优化了原有的文件系统,使得其速度得到了很大的提升,这时候我爱上了AQTime这样一个工具,就是它使得优化工作从以前的不停插入GetTime代码,到后来的编码完成,运行,看数据这样享受的过程!
再后来,开始做反外挂工作,现在也还在做,但是慢慢的发现老总的想法和自己有所偏差,我一直希望尽量高强度的去预防,而老总却常常觉得到一定规模就够了,因为毕竟我们不是专家,花太多时间并不值得。这段时间我将我全部的精力都用在了反汇编上面,看了不少C++的反汇编代码,结合前段时间看的《Inside C++ Object》一书,理解透了不少东西。正好也学习了一下C/C++中调用汇编代码和汇编代码中调用C/C++函数的方法,这些在将来做汇编优化的时候肯定有用。说实话,我很高兴我能在工作的初期阶段就能进行类似这样的工作,去了解壳,PE文件结构等知识,这些工作的受益可以是影响一辈子的!和数据结构的知识相比也毫不逊色!我当时的想法我趁此时投入全部精力好好的学习Win32 汇编,但是看起来现在是没有太多时间了。此事中间有个插曲,为了防止太容易的被人反汇编,我们在整个反外挂系统中加入了一些Python元素,这部分的工作因为我以前学过Python自然的交到了我头上,而我在额外熟悉了Python C API接口的基础上,肯定是很快的完成了任务:)这点倒真是戏剧性,工作外的学习,最后也对工作有了帮助。
接下来的目标:第一年就学习的我这么杂的程序员估计不多了,的确太杂了,所以我还是好好的按照原有计划来,将网络部分好好精通吧,不然感觉和一事无成也差不太远,虽然就算上述所有的杂项知识都用不上,其实对于我对于一些新API的掌握也比刚开始的速度要快多了,毕竟学的多了:)
网络,这是我剩下两个月中最最重要的目标。我要在工作满一年之际,发现我已经可以编写一般的网络程序,甚至小型高效的网络框架!

本文来自CSDN博客,转载请标明出处:
http://blog.csdn.net/vagrxie/archive/2009/02/09/3868743.aspx
心事过重

2024-07-28 00:40:37

侯捷曾经把STL的学习比喻为三个境界(或层次):
第一境界:熟用STL
第二境界:了解泛型技术的内涵与STL的学理乃至实作
第三境界:扩充STL

我和楼主差不多在同一个阶段,现在正在看侯捷/孟岩翻译的《c++标准程序库》,这本书主要讲了标准程序库的用法,有点像一本工具书,每个知识点都带了代码,如果你想熟用stl,可以从这本书入门。
看完这个后准备看《STL源码剖析》,第二境界!
要找资源的话,可以去csdn,开源中国,之类的!有问题找百度哈哈!
跨步大

2024-07-28 02:31:54

C++标准程序库
印象苏黎世。

2024-07-28 02:33:48

http://www.csdn.net/
这个不解释,大家都知道
小故事里的海

2024-07-28 01:36:34

《C++primer》~~~
白裙红衣

2024-07-28 00:03:13

谭浩强的书不错
清华大学出版社的