工作中最推荐的 C/C++ 程序库有哪些,为什么?

作者:编程指北
转自链接:https://www.zhihu.com/question/51134387/answer/1969440234

必须是 Facebook Folly!这是facebook 开源的基于C++14的库,在facebook内部广泛使用。

前言

目前在鹅厂做 Linux C++ 后台开发,可以说是我看过最优雅的现代C++项目,里面一部分工具实现非常棒,比如hash map

Folly的全称为Facebook Open-source Library,目的不是为了替代标准库,而是对标准库的一种补充,尤其是大规模下的性能。

而且有很多C++标准库没有的工具,比如我之前写代码需要一个线程安全的hash map,但是C++标准库中没有线程安全的hash map。

而 folly 中就有一个高性能的hash map,还有 string,对比 标准库有极大的性能提升。

用Facebook自己的话来说就是:

Good performance at large scale is a unifying theme in all of Folly.

仓库地址:facebook/folly

这真的是一个很好的现代C++项目!

另外就是推荐一些谷歌的开源C++库,C++ 可以说很多工具链、框架都是谷歌引领的,谷歌其实在C++语言本身上的贡献并不多,更多的是开发C++生态链工具,为C++推广和广泛使用有很大的助力:

  1. 首先是代码规范,几乎所有公司的代码规范,都是源自 Google Style Guide :C++ 风格指南 - 内容目录 - Google 开源项目风格指南 然后在上面增删一些自己的定制化要求
  2. 谷歌几乎所有核心的后台服务代码都是C++构建的,尤其是搜索引擎这一类
  3. 谷歌开源的 Bazel 目前被引入微信作为编译构建的工具,一改手写makefile的悲惨时光官网:http://bazel.io/

Github:google/bazel · GitHub

很多小伙伴说看不太懂有些源码,我的建议是多看一些架构方面的书,在这,顺便分享一份大学期间自己整理的电子书库,汇集了编程语言(Java、C++、C、Python等等)、操作系统、计算机网络、系统架构、设计模式、程序员数学、测试、中间件 、前端开发、后台开发、网络编程、Linux使用及内核、数据库、Redis....等主流的编程学习书籍。

我整理的这些书大家可以在这里获取,对于学习计算机的同学帮助非常大,且十分系统

书单:书单推荐,少即是多(含下载方式)

4. 谷歌开源的 Leveldb几乎被现在很多分布式存储项目用作底层存储引擎,LevelDB是一个可持久化的KV数据库引擎,由Google传奇工程师Jeff Dean和Sanjay Ghemawat开发并开源。无论从设计还是代码上都可以用精致优雅来形容,非常值得细细品味:

5. 谷歌开源的浏览器内核Chromium 造福了国内一众做浏览器的公司,直接套个壳就能用,现在连微软都放弃了IE,专用谷歌Chromium内核开发的Edge。

6、Google 开源的序列化框架:Google Protobuf几乎成了服务端RCP序列化协议首选,兼容性强、性能好,Google Protocol Buffer 是一个平台无关、语言无关的结构化数据的序列化与反序列化工具。 protocol buffer,可以用来在跨进程、跨机器,不同操作系统,不同编程语言之间进行数据交换。类似于微软的COM IDL或者XML,但是解析速度更快,需要传输字节数更少。(c+ +, java, python)

7、v8 - V8 JavaScript Engine V8 是 Google 的开源 JavaScript 引擎。 直接让JS性能成倍翻

8、googletest - Google C++ Testing Framework,C++单元测试框架

9、sparsehash - An extremely memory-efficient hash_map implementation Google Sparse Hash 是 Google 一个很节省内存的 hash map 实现 10 、gflags - Commandline flags module for C++ Google GFlags 是一个命令行标记的处理库,它可以替代“getopt()”,其内置对C++的支持比如string。 11、gperftools - Fast, multi-threaded malloc() and nifty performance analysis tools TCMalloc,heap检测,是一个google用于性能检测的工具。(c++) 12、google-breakpad - Crash reporting

13、breakpad,一个项目的开始需要做一些什么样的基础设施,crash dump和运行logging毫无疑问都是应该有的,这个项目就是负责在crash的时候收集信息,发出crash dump报告的。

当然了,很多经典的C++项目和库也不是全是谷歌开发的,个人比较喜欢Facebook Folly,优雅、可读性好。

在这给大家介绍下一些经典的C++库吧:

原文: https://www.cnblogs.com/zhoug2020/p/5812578.html 来源:博客园,作者:莫水千流

经典的C++库

STLport-------SGI STL库的跨平台可移植版本,在以前有些编译器离符合标准比较远的情况下那时还是有用的,当然目前vc71已经比较接近标准了,故目前不怎么用它了。

Boost---------准标准库,功能强大涉及能想的到的大部分非特别领域的算法,有一个大的C++社区支持

WxWindows-----功能强大的跨平台GUI库,它的功能和结构都类似MFC,故原则上可以通过WxWindows把现有MFC程序移植到非Win平台下

Blitz---------高效率的数值计算函数库 ,你可以订制补充你需要的算法

Log4cpp-------日志处理,功能类似java中的log4j

ACE-----------自适应通讯环境,重量级的通讯环境库。

Crypto++ -----加/解密算法库, 非常专业的C++ 密码学函式库

CppUnit --- 一个c++的单元测试框架 类似 java 的JUnit

Loki ------- 一个实验性质的库,尝试把类似设计模式这样思想层面的东西通过库来提供,他是C++的一个模板库,系C++"贵族",它把C++模板的功能发挥到了极致

学术性的C++库:

FC++ --------The Functional C++Library ,用库来扩充语言的一个代表作 ,模板库

CGAL ------- Computational GeometryAlgorithms Library计算几何方面的大部分重要的解决方案和方法以C++库的形式提供给工业和学术界的用户。

其它目前我感觉还不是很爽的C++库:

Doxygen ----注释文档生成工具 ,可恨的是我找不到 windows版本

QT ----------大名顶顶的一个多平台的C++图形用户界面应用程序框架(GUI库)可气的是他的Windows版是商业发布的要付费

xml4c--------IBM开发的XML Parser,系超重量级的,适用大型应用中,其DLL有 12M,恐怖吧,轻量级的有TinyXml

Xerces c++ --Apache的XML项目, 但 只支持少数的字符编码,如ASCII,UTF-8,UTF-16等,不能处理包含中文字符的XML文档

XMLBooster ----- 也是一种 XML的 解析工具

Fox -------又一种开放源代码(C++)的GUI库,功能不是很强

C++开发环境(Win平台下除了 VisualC++ 和 Borland C++以外的):

Cygwin --------Windows下的一个Unix仿真环境

MinGW --------GCC的一个Windows移植版本

Dev C++ -------- 一个C/C++ 的集成开发环境,在Windows上的C++编译器一直和标准有着一段距离的时候,GCC就是一个让Windows下开发者流口水的编译器。

Eclipse-CDT ----IMB 开发的一个集成开发环境,一般用来作为Java 开发环境,但由于Eclipse 是通过插件体系来扩展功能,这里我们 安装 CDT插件后,就可以用来作为C++集成开发环境工具。

50个知名的开源网站

1、http://snippets.dzone.com/tag/c/--数以千计的有用的C语言源代码片段

2、http://www.hotscripts.com/category/c-cpp/scripts-programs/Hotscripts --提供数以百计的C和C++脚本和程序。所有程序都分为不同的类别。

3、http://www.planetsourcecode.com/vb/default.asp?lngWId=3--超过万行C和C++免费的源代码

4、http://freshmeat.net/browse/164/--超过9000个C编写的项目。

5、http://www.daniweb.com/code/c.html--DANIWEB提供的实用代码段。

6、http://www.programmersheaven.com/tags/C/--programmersheaven.com上的C编程资源。

7、http://www.ddj.com/code/ddj.html--Dr. Dobb’s Journal的源代码。

8、http://www.cprogramming.com/cgi-bin/source/source.cgi--C和C + +编程资源。

9、http://private.codecogs.com/--CodeCogs是一项协作的开放源码库,C/C++的数值方面的组件。

10、http://www.google.com/codesearch?q=programming++lang:c&cs_r=lang:c--谷歌代码的C源代码。

11、http://www.codepedia.com/1/C--CodePedia是一个开放的关于系统编程和其他与电脑有关的议题。

12、http://www.cis.temple.edu/~ingargio/cis71/code/--为学生提供的一个简单的C语言程序的列表。

13、http://www.codeproject.com/?cat=2--codeproject提供的C/C++资源代码项目。

14、http://www.thefreecountry.com/sourcecode/cpp.shtml--以下是一些C和C++库的DLL,VCLs,源代码,元件,模块,应用程序框架,类库,源代码片段等,你可以在您的项目中使用而不需要支付费用和版税。

15、http://people.sc.fsu.edu/~burkardt/cpp_src/cpp_src.html--这是一个全面的关于C++的345个源代码清单。

16、http://www.cplusplus.com/src/--C++写的通用控制台程序和Windows程序代码清单。

17、http://users.cs.fiu.edu/~weiss/dsaa_c++/code/--C++语言数据结构与算法分析(第二版)的源代码。

18、http://c.snippets.org/--C源代码片段。

19、http://www.bbdsoft.com/downloads.html--C++源代码。

20、http://www.moshier.net/天文学和数值软件源代码

21、http://cplus.about.com/od/cgames/C_Games_with_Source_Code.htm--游戏有关的C++源代码。

22、http://cliodhna.cop.uop.edu/~hetrick/c-sources.html--免费的C/C++数值计算源代码。

23、http://www.mathtools.net/C_C__/Utilities/index.html--C/C++工具。

24、http://www.programmerworld.net/resources/c_library.htm--免费C++源代码和其它有用的工具。

25、http://www.cmcrossroads.com/bradapp/links/cplusplus-links.html--布拉德阿普尔顿的C++链接-资源,项目,图书馆,教学和编码。

26、http://www.robertnz.net/cpp_site.html--这是一个收集了数C/C++网站链接列表的网页。

27、http://www.josuttis.com/libbook/examples.html--在这里,你可以看到并下载所有的本书的C++标准库例子。

28、ftp://66.77.27.238/sourcecode/cuj/--C/C++用户杂志

29、ftp://66.77.27.238/sourcecode/wd/--Windows开发者网络

30、http://www.einet.net/directory/65892/Developers.htm--C程序

31、http://www.daniweb.com/code/cplusplus.html--实用代码段。

32、http://snippets.dzone.com/tag/c--C++源代码

33、http://www.programmersheaven.com/tags/C--C++编程资源,http://programmersheaven.com

34、http://www.google.com/codesearch?hl=en&lr=&q=programming--谷歌代码搜索-C++编程语言

35、http://www.codepedia.com/1/Cpp--CodePedia是一个开放的关于系统编程和其他与电脑有关的议题的网站。

36、http://www.codebeach.com/index.asp?TabID=1&CategoryID=3--C++源代码,Codebeach提供

37、http://freshmeat.net/browse/165/--5000项目写的C++编程语言

38、http://cplus.about.com/od/codelibrary/Code_Library_for_C_C_and_C.htm--代码库C、C + +和C#。

39、http://www.c.happycodings.com/--Visual Basic、PHP、ASP技术、C、C++大全。

40、http://www.blueparrots.com/--Borland C游戏,图像和声音源代码范例。

41、http://www.java2s.com/Code/Cpp/CatalogCpp.htm--C++源代码。

42、http://www.yeohhs.com/modules/mydownloads/--C与C++电子书和源代码示例。

43、http://www.brpreiss.com/books/opus4/programs/index.htmlC++的数学方程和公式源代码。

44、http://users.cs.fiu.edu/C++

45、http://www.josuttis.com/libbook/examples.html--C++标准库-教程和参考资料。

46、http://emr.cs.uiuc.edu/~reingold/calendars.shtmlEdward M. Reingold's Calendar Book, Papers, and Code。

47、http://cpp.snippets.org/--c++源代码档案。

48、http://ubiety.uwaterloo.ca/~tveldhui/papers/techniques/--用C和C++的解决科学问题。

49、http://c.ittoolbox.com/topics/core-c/--C/C++的IT工具框。

50、http://www.le.ac.uk/cc/tutorials/c/ccccdbas.html--本文件中包含有大量的C示例程序

知识库

下面结合自己多年的开发经验,想到哪里写到哪里,希望对新人有一定的帮助。

一、网络

网络库必须掌握 ACE 和 libevent, 一个是重量级的网络库, 一个是轻量级的网络库。仔细想想,现在那个程序不用网络啊。不懂网络,你将寸步难行啊。熟悉这两个开源库的    前提是你必须懂socket的原理,给 大家推荐的好书就是《UNIX网络编程》,看懂这本书就可以了,其他的什么《windows网络编程》这些都不用看,因为网络编程,你学会了伯克利的套接 字,你就可以在任何平台上进行网络编程了,不需要学什么windows下的网络编程,因为windows下的网络也是从伯克利套接字搞过来的,如果你学习 《windows网络编程》,那么你那天在linux,unix下进行网络编程,你还得在学习一下。没有那个必要。

二、数据库

数据库嘛,开源的Mysql和开源的PostgreSQL只要懂其中一个就可以了,商业数据库在掌握一个Oracle就可以了,文件数据库掌握 sqlite。不过请大家注意,不要被上面数据库名字给迷惑了,数据库的本质是SQL语句,一定要懂数据库的基本原理,熟练应用SQL语言,懂数据库的优 化,存储过程等。数据库的原理搞懂了,拿什么数据库过来都轻松掌握,就不会在乎是Mysql还是Oracle了。

三、日志操作

日志操作推荐大家熟悉 log4cpp这个日志库, 支持多线程, 日志重定向到网络等都有, 反正你能想到的日志的功能都有。日志嘛,一个是方便查找问题,方便记录程序运行的一些情况。这是必须的。

四、管理后台

众所周知,写程序是给其他人用的,不是自己用,所以在程序的易用性上,多给对方提供一些可以直接查看的管理界面,显得分成重要。为程序提供一个web的管理界面,方便用户登录上去查看程序的各种信息,很有必要。

五、读取配置文件

所有的程序都必须有配置文件,方便配置一些项目,为程序提供灵活性。 所以写程序,必须有读取配置文件的封装类。

六、内存池

所有的进程都需要分配内存,对C/C++来说,分配和管理内存是已经很有挑战性的工作。给大家推荐 nedmalloc 这个开源的内存池库。nedmalloc是一个跨平台的高性能多线程内存分配库,很多库都使用它。

七、缓存库

众所周知,缓存库用得最多的就是memcache了。在做数据库开发的时候特别有用。

八、脚本

脚本是一个很有意思的东西,很多功能,其实我们只要写个脚本就可以完成,代码量少,开发速度快。必须掌握的脚本,比较通用的要算 perl 了,很古老的语言,但是功能太强大了。我可以保证的说,.net,java能干的工作,肯定可以让perl来干。C能干的, perl不一定能干。perl作为linux,unix的系统集成的脚本语言,必须学会。

lua 语言,在游戏行业用得比较多。

python 脚本,功能很强大,推荐学。

上面这些是所有程序都会用到的比较通用的功能。

在不同的应用领域,需要掌握不同开源库,比如搞游戏开发的,可能需要掌握开源的UI库CEGUI、duilib, 开源的3D引擎OGRE等。

书籍推荐

首页关注博主公众号《猫青年》,回复“书籍”,获取更多高清电子书资源!完全免费!

GitHub - imarvinle/awesome-cs-books: 🔥 经典编程书籍大全,涵盖:计算机系统与网络、系统架构、算法与数据结构、前端开发、后端开发、移动开发、数据库、测试、项目与团队、程序员职业修炼、求职面试等

其他资源

小平杂记 - 知乎

Google的C++开源代码项目

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值