C++ 著名程序库 概览

      本文转载自: http://ace.acejoy.com/thread-3777-1-1.html

 

1、C++各大有名库的介绍——C++标准库
2、C++各大有名库的介绍——准标准库Boost
3、C++各大有名库的介绍——GUI
4、C++各大有名库的介绍——网络通信
5、C++各大有名库的介绍——XML
6、C++各大有名库的介绍——科学计算
7、C++各大有名库的介绍——游戏开发
8、C++各大有名库的介绍——线程
9、C++各大有名库的介绍——序列化
10、C++各大有名库的介绍——字符串
11、C++各大有名库的介绍——综合
12、C++各大有名库的介绍——其他库
13、C++名人的网站
在 C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重 量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比 较著名的大型库。
1、C++各大有名库的介绍——C++标准库

标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。
1.1、Dinkumware C++ Library
参考站点:http://www.dinkumware.com/
P.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobb‘s程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其 C/C++的产品中采用Dinkumware的库。
1.2、RogueWave Standard C++ Library
参考站点:http://www.roguewave.com/
这个库在Borland C++ Builder的早期版本中曾经被采用,后来被其他的库给替换了。笔者不推荐使用。
1.3、SGI STL
参考站点:http://www.roguewave.com/
SGI公司的C++标准模版库。
1.4、STLport
参考站点:http://www.stlport.org/
SGI STL库的跨平台可移植版本。

2、C++各大有名库的介绍——准标准库Boost

Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。 Boost中比较有名气的有这么几个库:
2.1 Regex  正则表达式库
2.2 Spirit   LL parser framework,用C++代码直接表达EBNF
2.3 Graph  图组件和算法
2.4 Lambda  在调用的地方定义短小匿名的函数对象,很实用的functional功能
2.5 concept check   检查泛型编程中的concept
2.6 Mpl   用模板实现的元编程框架
2.7 Thread   可移植的C++多线程
2.8 Python   把C++类和函数映射到Python之中
2.9 Pool    内存池管理
2.10 smart_ptr   5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:
Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。中文版见笔者在《Dr.Dobb‘s Journal软件研发杂志》第7辑上的译文。
Boost总体来说是实用价值很高,质量很高的库。并且由于其对跨平台的强调,对标准C++的强调,是编写平台无关,现代C++的开发者必备的 工具。但是Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。并且很多Boost中的库功能堪称对语言功能的扩展,其构造用尽精巧的手 法,不要贸然的花费时间研读。Boost另外一面,比如Graph这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品 代码中多多利用。
参考站点:http://www.boost.org

3、C++各大有名库的介绍——GUI

在众多C++的库中,GUI部分的库算是比较繁荣,也比较引人注目的。在实际开发中,GUI库的选择也是非常重要的一件事情,下面我们综述一下可选择的GUI库,各自的特点以及相关工具的支持。 3.1、MFC
大名鼎鼎的微软基础类库(Microsoft Foundation Class)。大凡学过VC++的人都应该知道这个库。虽然从技术角度讲,MFC是不大漂亮的,但是它构建于Windows API 之上,能够使程序员的工作更容易,编程效率高,减少了大量在建立 Windows 程序时必须编写的代码,同时它还提供了所有一般 C++ 编程的优点,例如继承和封装。MFC 编写的程序在各个版本的Windows操作系统上是可移植的,例如,在Windows 3.1下编写的代码可以很容易地移植到 Windows NT 或 Windows 95 上。但是在最近发展以及官方支持上日渐势微。
3.2、QT
参考网站:http://www.trolltech.com
Qt是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功 能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序 的基础。Qt也是流行的Linux桌面环境KDE 的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。[wangxinusT目前已经是Nokia旗下的产品,原官方网站已经失效,目前为http://qt.nokia.com.2009年初发布的Qt4.5版本开始使用LGPL协议,诺基亚希望以此来吸引更多的开发人员使用Qt库]
3.3、WxWindows
参考网站:http://www.wxwindows.org
跨平台的GUI库。因为其类层次极像MFC,所以有文章介绍从MFC到WxWindows的代码移植以实现跨平台的功能。通过多年的开发也是一个日趋完善的GUI库,支持同样不弱于前面两个库。并且是完全开放源代码的。新近的C++ Builder X的GUI设计器就是基于这个库的。[wangxinus注:迫于微软的施压,已经由WxWindows更名为wxWidgets]
3.4、Fox
参考网站:http://www.fox-toolkit.org/
开放源代码的GUI库。作者从自己亲身的开发经验中得出了一个理想的GUI库应该是什么样子的感受出发,从而开始了对这个库的开发。有兴趣的可以尝试一下。
3.5、WTL
基于ATL的一个库。因为使用了大量ATL的轻量级手法,模板等技术,在代码尺寸,以及速度优化方面做得非常到位。主要面向的使用群体是开发COM轻量级供网络下载的可视化控件的开发者。
3.6、GTK
参考网站:http://gtkmm.sourceforge.net/
GTK是一个大名鼎鼎的C的开源GUI库。在Linux世界中有Gnome这样的杀手应用。而Qt就是这个库的C++封装版本。[wangxinus注:“Qt 就是这个库的C++封装版本”是错误的。Qt早于GTK,最初Qt由于协议的原因引起社区的不满,另外开发了一个基于C语言的GTK库,后面的扩展版本为 GTK+。GTK+的Gnome和Qt的KDE是目前linux桌面的两大阵营,曾有水火不容之势。目前双方都以及开源社区的精神,已经和解。]

4、C++各大有名库的介绍——网络通信

4.1、ACE
参考网站:http://www.cs.wustl.edu/~schmidt/ACE.html
C++库的代表,超重量级的网络通信开发框架。ACE自适配通信环境(Adaptive Communication Environment)是可以自由使用、开放源代码的面向对象框架,在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ 包装外观(Wrapper Facade)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。
4.2、StreamModule
参考网站:http://www.omnifarious.org/StrMod
设计用于简化编写分布式程序的库。尝试着使得编写处理异步行为的程序更容易,而不是用同步的外壳包起异步的本质。
4.3、SimpleSocket
参考网站:http://home.hetnet.nl/~lcbokkers/simsock.htm
这个类库让编写基于socket的客户/服务器程序更加容易。
4.4、A Stream Socket API for C++
参考网站:http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.html
又一个对Socket的封装库。

5、C++各大有名库的介绍——XML

5.1、Xerces
参考网站:http://xml.apache.org/xerces-c/
Xerces-C++ 是一个非常健壮的XML解析器,它提供了验证,以及SAX和DOM API。XML验证在文档类型定义(Document Type Definition,DTD)方面有很好的支持,并且在2001年12月增加了支持W3C XMLSchema 的基本完整的开放标准。
5.2、XMLBooster
参考网站:http://www.xmlbooster.com/
这个库通过产生特制的parser的办法极大的提高了XML解析的速度,并且能够产生相应的GUI程序来修改这个parser。在DOM和SAX两大主流XML解析办法之外提供了另外一个可行的解决方案。
5.3、Pull Parser
参考网站:http://www.extreme.indiana.edu/xgws/xsoap/xpp
这个库采用pull方法的parser。在每个SAX的parser底层都有一个pull的parser,这个xpp把这层暴露出来直接给大家使用。在要充分考虑速度的时候值得尝试。
5.4、Xalan
参考网站:http://xml.apache.org/xalan-c/
Xalan是一个用于把XML文档转换为HTML,纯文本或者其他XML类型文档的XSLT处理器。
5.5、CMarkup
参考网站:http://www.firstobject.com/xml.htm
这是一种使用EDOM的XML解析器。在很多思路上面非常灵活实用。值得大家在DOM和SAX之外寻求一点灵感。
5.6、libxml++
http://libxmlplusplus.sourceforge.net/
libxml++是对著名的libxml XML解析器的C++封装版本。
5.7. TinyXML [wangxinus注:一个非常小巧的XML解析库,基于DOM的。]

6、C++各大有名库的介绍——科学计算

6.1、Blitz++
参考网站:http://www.oonumerics.org/blitz
Blitz++ 是一个高效率的数值计算函数库,它的设计目的是希望建立一套既具像C++ 一样方便,同时又比Fortran速度更快的数值计算环境。通常,用C++所写出的数值程序,比 Fortran慢20%左右,因此Blitz++正是要改掉这个缺点。方法是利用C++的template技术,程序执行甚至可以比Fortran更快。
Blitz++目前仍在发展中,对于常见的SVD,FFTs,QMRES等常见的线性代数方法并不提供,不过使用者可以很容易地利用Blitz++所提供的函数来构建。
6.2、POOMA
参考网站:http://www.codesourcery.com/pooma/pooma
POOMA是一个免费的高性能的C++库,用于处理并行式科学计算。POOMA的面向对象设计方便了快速的程序开发,对并行机器进行了优化以达到最高的效率,方便在工业和研究环境中使用。
6.3、MTL
参考网站:http://www.osl.iu.edu/research/mtl
Matrix Template Library(MTL)是一个高性能的泛型组件库,提供了各种格式矩阵的大量线性代数方面的功能。在某些应用使用高性能编译器的情况下,比如Intel的编译器,从产生的汇编代码可以看出其与手写几乎没有两样的效能。
6.4、CGAL
参考网站:www.cgal.org
Computational Geometry Algorithms Library的目的是把在计算几何方面的大部分重要的解决方案和方法以C++库的形式提供给工业和学术界的用户。

7、C++各大有名库的介绍——游戏开发

7.1、Audio/Video 3D C++ Programming Library
参考网站:http://www.galacticasoftware.com/products/av/
AV3D是一个跨平台,高性能的C++库。主要的特性是提供3D图形,声效支持(SB,以及S3M),控制接口(键盘,鼠标和遥感),XMS。
7.2、KlayGE
参考网站:http://home.g365.net/enginedev/
国内游戏开发高手自己用C++开发的游戏引擎。KlayGE是一个开放源代码、跨平台的游戏引擎,并使用Python作脚本语言。KlayGE在LGPL协议下发行。感谢龚敏敏先生为中国游戏开发事业所做出的贡献。
[wangxinus注:这个库国人了解很少,百度百科的KlayGE词条还是本人创建的。一个人开发一个游戏引擎库,是在让笔者汗颜,对作者表示钦佩!]
7.3、OGRE
参考网站:http://www.ogre3d.org
OGRE(面向对象的图形渲染引擎)是用C++开发的,使用灵活的面向对象3D引擎。它的目的是让开发者能更方便和直接地开发基于3D硬件设备 的应用程序或游戏。引擎中的类库对更底层的系统库(如:Direct3D和OpenGL)的全部使用细节进行了抽象,并提供了基于现实世界对象的接口和其 它类。

8、C++各大有名库的介绍——线程

8.1、C++ Threads
参考网站:http://threads.sourceforge.net/
这个库的目标是给程序员提供易于使用的类,这些类被继承以提供在Linux环境中很难看到的大量的线程方面的功能。
8.2、ZThreads
参考网站:http://zthread.sourceforge.net/
一个先进的面向对象,跨平台的C++线程和同步库。

9、C++各大有名库的介绍——序列化

9.1、s11n
参考网站:http://s11n.net/
一个基于STL的C++库,用于序列化POD,STL容器以及用户定义的类型。
9.2、Simple XML Persistence Library
参考网站:http://sxp.sourceforge.net/
这是一个把对象序列化为XML的轻量级的C++库。

10、C++各大有名库的介绍——字符串

10.1、C++ Str Library
参考网站:http://www.utilitycode.com/str/
操作字符串和字符的库,支持Windows和支持gcc的多种平台。提供高度优化的代码,并且支持多线程环境和Unicode,同时还有正则表达式的支持。
10.2、Common Text Transformation Library
参考网站:http://cttl.sourceforge.net/
这是一个解析和修改STL字符串的库。CTTL substring类可以用来比较,插入,替换以及用EBNF的语法进行解析。
10.3、GRETA
参考网站:http://research.microsoft.com/projects/greta/
这是由微软研究院的研究人员开发的处理正则表达式的库。在小型匹配的情况下有非常优秀的表现。

11、C++各大有名库的介绍——综合

11.1、P::Classes
参考网站:http://pclasses.com/
一个高度可移植的C++应用程序框架。当前关注类型和线程安全的signal/slot机制,i/o系统包括基于插件的网络协议透明的i/o架构,基于插件的应用程序消息日志框架,访问sql数据库的类等等。
11.2、ACDK - Artefaktur Component Development Kit
参考网站:http://acdk.sourceforge.net/
这是一个平台无关的C++组件框架,类似于Java或者.NET中的框架(反射机制,线程,Unicode,废料收集,I/O,网络,实用工具,XML,等等),以及对Java, Perl, Python, TCL, Lisp, COM 和 CORBA的集成。
11.3、dlib C++ library
参考网站:http://www.cis.ohio-state.edu/~kingd/dlib/
各种各样的类的一个综合。大整数,Socket,线程,GUI,容器类,以及浏览目录的API等等。
11.4、Chilkat C++ Libraries
参考网站:http://www.chilkatsoft.com/cpp_libraries.asp
这是提供zip,e-mail,编码,S/MIME,XML等方面的库。
11.5、C++ Portable Types Library (PTypes)
参考网站:http://www.melikyan.com/ptypes/
这是STL的比较简单的替代品,以及可移植的多线程和网络库。
11.6、LFC
参考网站:http://lfc.sourceforge.net/
哦,这又是一个尝试提供一切的C++库

12、C++各大有名库的介绍——其他库

12.1、Loki
参考网站:http://www.moderncppdesign.com/
哦,你可能抱怨我早该和Boost一起介绍它,一个实验性质的库。作者在loki中把C++模板的功能发挥到了极致。并且尝试把类似设计模式这样思想层面的东西通过库来提供。同时还提供了智能指针这样比较实用的功能。
12.2、ATL
ATL(Active Template Library)是一组小巧、高效、灵活的类,这些类为创建可互操作的COM组件提供了基本的设施。
12.3、FC++: The Functional C++ Library
这个库提供了一些函数式语言中才有的要素。属于用库来扩充语言的一个代表作。如果想要在OOP之外寻找另一分的乐趣,可以去看看函数式程序设计的世界。大师Peter Norvig在 “Teach Yourself Programming in Ten Years”一文中就将函数式语言列为至少应当学习的6类编程语言之一。
12.4、FACT!
参考网站:http://www.kfa-juelich.de/zam/FACT/start/index.html
另外一个实现函数式语言特性的库
12.5、Crypto++
提供处理密码,消息验证,单向hash,公匙加密系统等功能的免费库。
还有很多非常激动人心或者是极其实用的C++库,限于我们的水平以及文章的篇幅不能包括进来。在对于这些已经包含近来的库的介绍中,由于并不是每一个我们都使用过,所以难免有偏颇之处,请读者见谅。

13、C++名人的网站
正如我们可以通过计算机历史上的重要人物了解计算机史的发展,C++相关人物的网站也可以使我们得到最有价值的参考与借鉴,下面的人物我们认为没 有介绍的必要,只因下面的人物在C++领域的地位众所周知,我们只将相关的资源进行罗列以供读者学习,他们有的工作于贝尔实验室,有的工作于知名编译器厂 商,有的在不断推进语言的标准化,有的为读者撰写了多部千古奇作……

 

 

 

-----------------------------------我是分割线--------------------------------------------

C/C++ 开发库 | C/C++ Development Library

这里收集一些著名的 C/C++ 开发库、SDK、类库、可复用类与结构代码 等信息,列举它们的介绍、参考和网站链接,为各位 C/C++ 程序员和爱好者提供检索和查阅类库的方便

下面收集的 C/C++ 类库介绍整理来源于文章:C++ 资源之不完全导引(作者:曾毅、陶文),这篇文章曾发表于 2004 年 5 月《CSDN 开发高手》

上文中介绍的类库有些已经多年未见发布和网站内容的更新了,特别是一些开源的项目。我检查了作者提供的 链接地址 和项目的 活跃程度,更改内容上的偏差并补全了重要说明。另外,增加了自己使用和了解的 C/C++ 类库的介绍

因为在下面的介绍中,自己也有大量未曾使用和了解的开发库、类库,所以介绍如有纰漏和错误,都可以告诉我

下面的 C/C++ 开发库、类库会不定期更新

更新说明列表 (Last Update: 2011-02)

目录

  • C/C++ 标准库与运行时库 | C/C++ Standard & Runtime Library
  • 模式复用与基础功能 | Pattern Reuse & Basic Function
  • 字符串处理 | String Handling
  • 应用框架与图形用户界面 | Application Framework & GUI
  • 通用功能 | General Function
  • 线程 | Threads
  • 科学与并行计算 | Scientific & Parallel Computation
  • 网络功能 | Network Communication
  • XML 功能 | XML Functions
  • 持久存储 | Persistence & Storage
  • 加解密 | Cryptographic
  • 日志 | Logging
  • 函数式编程 | Functional Programming
  • 杂项 | MISC


C/C++ 标准库与运行时库 | C/C++ Standard & Runtime Library

实现 ISO 的 C/C++ 语言规格标准中要求的标准库,每个组织或厂家的实现均有差异。在链接的二进制库中通常还伴随实现了平台特定的基础运行时库,例如 POSIX 标准。

ISO C/C++/POSIX 的标准如下:

Microsoft C Run-Time Libraries & Standard C++ Library

微软的这一套运行时库,在功能和链接库上分为 3 个部分:Run-Time Libraries (CRT)、Standard C++ Library、CRT for Managed Code,分别对应的动态链接库为:msvcr[ver].dll、msvcp[ver].dll、msvcm[ver].dll。

VC8、VC9 采用了 Side-by-Side (WinSxS, Manifest) 方式部署 CRT 库,但在 VC10 中又去掉了 Side-by-Side 的部署方式。在 %SystemRoot%/system32 中有一个随 Windows 发布的 Known DLL:msvcrt.dll;而带版本号 [ver] 的库在 VC 或 VC Redistributable Package 中发布。

VC7 之后在 namespace stdext 中提供 hash_map、hash_set 两个扩展标准的容器模板。

GNU C/C++ Library

通常称为 GNU libc 和 libstdc++,是 GNU 的 C/C++ 标准库和运行时库的实现,在各种 Linux 发行版中都会安装该库,也是很多开源 C/C++ 程序选择的基础库。另外 libc 和 libstdc++ 也被移植到各种平台下,如 Windows 下的 MinGW 和 Cygwin 就包含 libc 和 libstdc++:

MinGW

MinGW: Minimalist GNU for Windows,在 Windows 平台提供一套 GNU 的开发环境,包括工具和开发库。MinGW 中包括对 GCC 和 GNU libc、libstdc++ 的 Windows 移植。

Cygwin

发源于 RedHat 的 Cygwin 项目,目标在于在 Windows 下建立一套 Unix/Linux 环境,包括 X Window 这种 Linux GUI 基础库在内,所以又叫 Cygwin/X。Cygwin 实现的重点是 cygwin1.dll,它向其它 Cygwin 程序提供 POSIX 接口,并在内部转换成 Windows API 调用。Cygwin 中包括对 GCC 和 GNU libc、libstdc++ 的 Windows 移植。

Tiny C Runtime Library

一个小巧的 Windows 平台 CRT 库实现,可用来替换对 Microsoft CRT 库的链接,达到精简依赖的基础库、减小最终发布程序大小的作用。

SGI STL

SGI 公司的 C++ 标准模版库。

STLport

SGI STL 库的跨平台可移植版本。

Dinkumware C++ Library

P.J. Plauger 编写的高品质的标准库。P.J. Plauger 博士是 Dr. Dobb‘s 程序设计杰出奖的获得者。其编写的库长期被 Microsoft 采用,并且 Borland 也取得了其 OEM 的 license,在其 C/C++ 的产品中采用 Dinkumware 的库。

RogueWave Standard C++ Library

这个库在 Borland C++ Builder 的早期版本中曾经被采用,后来被其它的库给替换了。不推荐使用。

模式复用与基础功能 | Pattern Reuse & Basic Function

其实这个分类的界限很难确定,原因是有一些 C/C++ 库提供各种各样的模式形式,在功能上也包罗万象,并不专一,属于综合性功能。但在目标上这些库都是一致的:加强 C/C++ 语言的功能、复用度,提供稳定的基础功能。什么是基础功能?应该是那些不依赖于平台,每个应用可能都会用到的功能,例如:字符串、通用算法和容器等。

Boost

Boost 是高质量、可移植、开放源代码的 C++ 库,作为标准库的后备,是 C++ 标准化进程之一。Boost 库由 C++ 标准委员会库工作组成员发起,在 C++ 社区中影响甚大。Boost 库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准标准库”。

Boost 不是一个库,而是一组库,每一个 Boost 库都是一个相对独立的功能(通常在一个子目录下发布),可以独立链接和使用,一般称 Boost 中的 xxx 库为 Boost.xxx。有些 Boost 库根本不用编译成二进制的静态或动态链接库形式,只要在应用它的源码中 include 包含它的头文件就可以直接使用,称为 Header-Only 库,如 Boost.Lambda。

Boost 由于其对跨平台的强调,对标准 C++ 的强调,是编写平台无关,现代 C++ 的开发者必备的工具。但是 Boost 中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。并且很多 Boost 中的库功能堪称对语言功能的扩展,其构造用尽精巧的手法,不要贸然的花费时间研读。Boost 另外一面,比如 Graph 这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品代码中多多利用。

另外,Boost 的官方文档也是相当漂亮的,讲述的清晰明了:从 概念 到 示例都有,在开源库中是不可多得的。

除了 Boost 发布包中包括的库之外,还有一些库处于提交待审成为 Boost 库的状态 (Proposal),或处于尚在测试和评审阶段 (TR),Boost 发布包中未将这些库包含进来,可以从这些库的专项地址下载,例如用于日志的Boost.Log库。

列举 Boost 中的几个库:

Loki

Loki 的作者就是大名顶顶的 Andrei Alexandrescu,"Modern C++ Design"(《C++ 设计新思维》)一书的作者,Boost 和C++0x 的推动者之一。

Loki 早期是 "Modern C++ Design" 一书的附带类库,是实验和教学性质的库。但随着作者的维护、更新和改进,Loki 现在已经在复用性和稳定性上已逐渐成熟了。

Loki 中把 C++ 模板的功能发挥到了极致。尝试把类似 设计模式 这样思想层面的东西通过库来提供。同时还提供了智能指针这样比较实用的功能。

stlsoft

stlsoft 从名字都可以知道是 STL 的扩展功能库,这一点和 Boost 的定位很像。stlsoft 的作者是 Matthew Wilson,stlsoft 也有配套的书籍 "Extended STL" 共两卷:

Extended STL, Volume 1: Collections and Iterators

Extended STL, volume 2: Adaptors, Algorithms, Allocators, Functions, Ranges and Views

stlsoft 包含一些基本的通用功能,例如字符串处理 (stlsoft/string/),当然这是基于 std::basic_string 的处理。stlsoft 最吸引人的地方是:免费 和 全部的功能都是 Header-Only 的,使用时只要包含头文件即可。

字符串处理 | String Handling

通用的字符串处理功能,可以划分到 模式复用与基础功能 | Pattern Reuse & Basic Function 类别中,但为了查阅方便,还是把它分离出来了。包括:字符串的类包裹对象、格式化字符串、Tokenizer、分词、正则表达式处理 等。当然 C/C++ 的标准库,以及很多应用框架和 GUI 库中,也都有字符串处理相关的功能实现(如:strtok()、std::basic_string、std::basic_stringstream、 ATL/MFC 的 CStringT 等),这里就不再列出这些功能了,有需要可以参考 MSDN Librarywww.cppreference.comwww.cplusplus.com 等一些 C/C++ 参考网站。

Boost 中的字符串处理相关库

上面说了 Boost 是一套包罗万象的通用功能 C++ 库,下面列出一些 Boost 中的和字符串处理相关的库:

  • Boost String Algorithms Library:Boost 字符串算法库,功能大多在头文件 boost/algorithm/string.hpp 中集中声明,并在 boost/algorithm/string/ 下有分别功能的定义,在名字空间 boost::algorithm 中。这个 Boost 字符串算法库通常和标准库的字符串实现 std::basic_string 联用,作为标准库字符串功能的扩展,例如可以做 tokenize 的算法 boost::algorithm::split() 或类 boost::algorithm::split_iterator, boost::algorithm::token_finder。
  • Boost.Tokenizer:Boost 专门提供的字符串 tokenize 分词库,在 boost/tokenizer.hpp 中声明,和它相关的还有 分词迭代器 (boost/token_iterator.hpp) 和 分词工具类 (boost/token_functions.hpp)。
  • Boost.Regex:上面已提到了,这是 Boost 的正则表达式功能实现。

另外 Boost 中还有 lexical_cast(数值/字符串转换)、Format(类似 printf() 的格式化)、Spirit(EBNF 解析)等和字符串/文本处理有关的库。

Common Text Transformation Libraryhttp://cttl.sourceforge.net/,基于标准库 std::basic_string 的字符串处理扩展功能,有 EBNF 解析功能。

GRETAhttp://research.microsoft.com/,微软 Research 的正则表达式模板库项目(已停止维护),支持 Perl 兼容的正则表达式处理。

应用框架与图形用户界面 | Application Framework & GUI

通用的应用程序开发框架库,通常以 GUI 为其重要的组成部分,但绝不止于 GUI,功能上小到 字符串,中到 网络通信,大到 层次架构都有可能支持。并且应用框架库不只是库的复用,而可能会引导程序员的程序架构设计,例如 MVC 架构。一般情况下足以单独依靠 某一个应用框架库来完成程序的开发。通常可以永葆活力的应用框架库背后都是有实力的组织或公司,稳定性比一般的库要强。

MFC

MFC (Microsoft Foundation Class) 微软基础类库,构建于 Windows API 之上,提供 OO 的接口风格。在 .Net Framework 成名前,MFC 是 Windows 平台开发程序主框架的首选,现在由 .Net Framework 接过这个任务。

ATL/WTL

ATL (Active Template Library) 是一组轻量级、高效的模板类,提供 GP 的接口风格,这些类为创建 COM 组件提供了基本的功能。

有一部分类和代码在 ATL 和 MFC 之间是共享的 (ATL/MFC Shared Classes),例如 实现 CString 的 CStringT 模板。

WTL 是基于 ATL 的一个库。使用了大量 ATL 的轻量级手法、模板等技术,在代码尺寸,以及速度优化方面做得非常到位。主要应用目标是 COM 轻量级网络下载的可视化控件 (ActiveX)。

不过微软的商业策略,包括 MFC 和风头上的 .Net Framework,WTL 早就被微软冷落了,最近的官方版本是 2007 年发布的 WTL 8.0,不过在 Sourceforge 的 WTL 项目中,于 2009 年发布了 WTL 8.1。

wxWidgets

由社区维护的开源跨平台 C++ 通用程序框架和 GUI 类库。wxWidgets 原来也叫 wxWindows,但由于微软的缘故更名为 wxWidgets。wxWidgets 的层次结构类似 MFC,熟悉 MFC 的人可以很快上手 wxWidgets。wxWidgets 使用基于运行平台的 Native API 实现,对于 Windows 来说就是 Windows API,对于 Linux 则可能是 GTK+ 或 X11。

除了 C++ 作为开发接口语言外,wxWidgets 最著名的其它语言封装接口是 Python 的封装接口:wxPython

wxWidgets 项目的活跃程度和更新、维护一直都很稳定,是值得长久信赖的通用程序框架和 GUI 类库。

GTK+/gtkmm

GTK+ (GIMP Toolkit) 是一个采用面向对象设计的使用 C 语言开发的 GUI 窗口开发库。最早作为 GIMP 绘图工具的基础库而开发。GTK+ 是 GNOME 桌面环境的基础库。gtkmm 是 GTK+ 的 C++ 语言封装。

Qt

Qt 原来是 Trolltech 公司的一个跨平台的 C++ GUI 框架,后来被 Nokia 收购成为其一个子部门。Qt 是另一个著名桌面环境 KDE 的基础库。和 GTK+ 不同,Qt 一开始就选择 C++ 作为实现其完全面向对象框架的开发语言。

通用功能 | General Function

这些库是包含了多种功能的综合性开发库、类库,一般目标是提供可移植的基础设施服务,例如 线程、网络功能 等。

P::Classes

活跃程度:2004-03 发布版本 1.0.0 beta1,2005-01 网站最近消息贴出 "We are not dead!" [2010-11 checked]

一个高度可移植的 C++ 应用程序框架。当前关注类型和线程安全的 Signal/Slot 机制,I/O 系统包括基于插件的网络协议透明的 I/O 架构,基于插件的应用程序消息日志框架,访问 SQL 数据库的类等。

ACDK

活跃程度:2006-03 公告 CVS 版下载 ACDK 5 a2 [2010-11 checked]

ACDK (Artefaktur Component Development Kit) 是一个平台无关的 C++ 组件框架,目标是实现类似于 Java 或者 .NET 中的框架,涉及的方面有:反射机制、线程、Unicode、废料收集、正则表达式、I/O、网络、SSL、SQL、实用工具、XML 等。还包括对 Java、Perl、Python、TCL、Lisp、COM 和 CORBA 的集成。

dlib C++ library

活跃程度:2010-11 发布版本 17.32 [2010-11 checked]

提供多种功能的跨平台综合库。涉及的方面有:数值计算 (Matrix)、网络功能 (Socket, streambuf, HTTP server)、线程、GUI、机器学习、图像处理(BMP 位图)、数据压缩与摘要、日志、单元测试框架、命令行解析、XML 解析、容器、序列化、BASE64 编解码、内存池管理 等。

Chilkat C++ Libraries

活跃程度:2010-07 发布 VC6-VC10 编译版本 9.1.0 [2010-11 checked]

提供一组库,包括:Zip、Mail、IMAP、加解密、MHT、XML、字符集、MIME、PFX、FTP 等。

PTypes

活跃程度:2007-06 发布版本 2.1.1 [2010-11 checked]

可以作为 STL 的简单替代品,提供可移植的线程(同步对象)和网络(Socket 和 命名管道)支持,也包括字符串、变体 (variant)、字符集、链表 等基础类型的实现。主要应用目标是的网络服务程序 和 robots 等。

LFC

活跃程度:2002-06 发布版本 0.5 [2010-11 checked]

一个提供通用目标的 C++ 类库、框架,涉及的方面有:通用数据结构、通用算法、文件、Socket、线程、GUI、数据库访问、通用设计模式、数据流、RTTI、持久化、多媒体(包括游戏开发与 3D 图形)、通用网络协议 (HTTP, FTP)、正则表达式 等。

线程 | Threads

pthreads

由 POSIX 定义的线程实现规范 POSIX threads,C 语言的 API,在各种 Unix/Linux 和 Windows 下都有支持,是一套移植性很好的通用线程库。

C++ Threads

活跃程度:2003-10 发布版本 3.6 [2010-11 checked]

C++ 封装的线程类,用于 Linux 开发的多线程支持。

ZThreads

活跃程度:2005-03 发布版本 2.3.2 [2010-11 checked]

一个跨平台,面向对象设计的线程和同步事务库。在 POSIX 和 Windows 下经过测试。

科学与并行计算 | Scientific & Parallel Computation

这个一开始可以分为两类:关于 数值计算 (Numeric Computation) 和 并行计算 的库,但是有相当一部分库同时涵盖这两种功能,并且现代的用于数学计算的程序越来越依靠并行处理来提升性能,所以就归到了一类。

Blitz++

Blitz++ 是一个高效的数值计算函数库,它的目的是建立一套具有 C++ 方便接口,同时又比 Fortran 速度更快的数值计算环境。通常,用 C++ 所写出的数值程序,比 Fortran 慢 20% 左右,因此 Blitz++ 正是要改掉这个差距。方法是利用 C++ 的 template 技术,程序执行甚至可以比 Fortran 更快。

CGAL

CGAL (Computational Geometry Algorithms Library) 是高效几何计算方面的 C++ 类库,CGAL 也有 Python 和 Matlab 的 API 接口。CGAL 应用的领域有:图形学、可视化、辅助设计与建模、GIS 等。

POOMA

POOMA (Parallel Object-Oriented Methods and Applications) 原先是由 Los Alamos National Laboratory (LANL) 开发的用于并行计算的 C++ 类库。

POOMA 提供近似于数学语法的高层语法,来简化算法的编程,并且自动处理多处理器之间的通信事务。POOMA 被用于物理模型的计算,例如:粒子物理计算。

FreePOOMA 是 POOMA 的继续项目,原先的 POOMA 已经很少维护了。

MTL

MTL (Matrix Template Library) 提供 矩阵 和 线性代数 计算的功能,是一个基于模板泛型设计,以高性能计算 (HPC: High-performance computing) 为目标的类库。

MTL 有 2 个版本:MTL4 和 MTL2,MTL4 是 2005 后重写的库。

OpenMP

OpenMP 不是一套复用目的的开发库,而是一组用于共享内存并行系统的多线程程序的一套指导规范,它由编译和运行环境支持,最新的 GCC、ICC、VC 都对 OpenMP 有所支持。OpenMP 规范支持的语言包括 C、C++ 和 Fortran。开发时,在源码中使用编译指示 (directive, #pragma) 指导编译器并行化,编译器自动将程序并行化,并在必要之处加入同步互斥语义。

Intel Compilers and Libraries

本来不想把 Intel Compilers and Libraries 放到这一类的,因为这个软件包含了除 开发库 外的编译和其它工具,但是由于使用此软件包能够在 Intel 平台下开发和生成出色性能的程序,以及对并行计算的强力支持,还是把它列出来了。这个软件包以及从 ICC 编译器增大到包括 VTune、Amplifier、Inspector、MKL (Math Kernel Library) 等各种性能工具和库的开发套件,是开发 Intel 平台高性能、并发程序的强力工具。

网络功能 | Network Communication

很多通用库和应用框架库,如 Boost.Asio,都有网络通信功能、异步网络 I/O 功能 (AIO) 或 Socket 封装库,这里只列出以 网络通信功能 为主要目的的开发库。

ACE

  • ACE Home:从这里开始了解 ACE,同时也是 ACE 之父 Schmidt 的主页。
  • ACE Repository:Schmidt 是 Vanderbilt 大学的教授,ACE 的源码可以从 Vanderbilt 大学的 SVN 仓库中下载。
  • ACE Docs:ACE 的 Doxygen 参考文档。

ACE (Adaptive Communication Environment) 中文译为 自适应通讯环境,由 Douglas Schmidt 发起,它是一套重量级的 C++ 网络/通信功能库,使用很多面向对象的设计模式,支持多平台。ACE 框架实现很多概念,如:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态配置、并发执行和同步 等

关于 ACE 的简介、评价、学习步骤和资料,参考 《学之者生,用之者死:ACE 历史与简评》by 陈硕

A Stream Socket API for C++http://www.pcs.cnu.edu/ 一个 Socket 封装库

A simple IOCP Server/Client Classhttp://www.codeproject.com/ Windows Socket + IOCP 完成端口封装库,一个小巧而高效的 Windows 网络处理类,文档中文翻译

XML 功能 | XML Functions

XML 是现代通用的数据保存格式,因为它的通用性和格式良好定义,被经常用在 数据存储、数据交换 和 接口说明 等功能中。先列举一些 XML 解析器 (XML Parser):

TinyXMLhttp://www.grinninglizard.com/tinyxml/,一个轻量级的 XML Parser.

MSXML

微软的 XML Parser,全称 Microsoft Core XML Services,采用 COM 的接口操作形式,提供 DOM 和 SAX2 API、XML Schema (XSD)、XPath、XSLT 功能。

xml4chttp://www.alphaworks.ibm.com/tech/xml4c,IBM 的重量级 XML Parser,C++ 实现,支持 100 多种字符编码。

Xerceshttp://xml.apache.org/xerces-c,Apache 的 XML Parser,支持少数的字符编码,如 ASCII、UTF-8、UTF-16 等,功能包括验证 DTD、SAX 和 DOM API 等。

libxml++http://libxmlplusplus.sourceforge.net/,对的libxml (The XML C parser and toolkit of Gnome) 解析器的 C++ 封装。

XMLBoosterhttp://www.xmlbooster.com/,使用 DOM 和 SAX 两大主流 XML 解析办法之外的解析器。

下面列举一些 XML 的功能库:

Xalanhttp://xml.apache.org/xalan-c/,Xalan 可以将 XML 文档转换为 HTML、纯文本或者其它 XML 类型文档。

gSOAPhttp://gsoap2.sourceforge.net/,SOAP/Web Services 的一个 C++ 开源实现。

SOAP/Web Services in ATL Server

  • ATL Server Reference in MSDN (VS8):微软对 ATL Server 库的支持降低了,在 MSDN Library 中,最后一个有 ATL Server 参考的版本是 VS8。因为现在微软主推的 .Net 框架中已包含 HTTP 和 SOAP 等 Web 功能(WCF 等)。
  • ATL Server Library and Tools in CodePlex:ATL Server 现在在 CodePlex 上托管和维护,可以在这里得到 ATL Server 最新的消息。

这是微软的 SOAP/Web Services 功能。原先微软有一个 SOAP Toolkit 的库,实现 SOAP/Web Services 功能,但后来被废弃了,并移入了 .Net 框架中。所以要使用本地代码 C/C++ 实现的 SOAP,就要使用 ATL Server 库中的 SOAP/Web Services 功能。ATL Server 库除了 SOAP 之外还提供其它 Web 功能,例如 HTTP 实现。

eXisthttp://exist.sourceforge.net/,持续化 XML 存储,XML 数据库。

Simple XML Persistence Library (SXP)http://sxp.sourceforge.net/,将对象序列化为 XML 的轻量级的 C++ 库,用于持久存储。

持久存储 | Persistence & Storage

通常 持久存储 表示的概念包括:(1) 将类型(POD 类型、类对象、容器)序列化为二进制数据。(2) 提供基于文件/流的操作。(3) 提供基于数据库的操作。对于 (3) 各数据库管理软件 (DBMS) 大多都提供自己的 C/C++ API,在 Windows 下更有 ODBC、OLE/DB 这种中间适配层提供统一的操作接口。下面只列出一些轻量级、开源的持久化功能。

s11nhttp://s11n.net/,一个基于 STL 的 C++ 库,用于序列化 POD 类型、STL 容器以及用户定义类型。

MySQL Connector/C++MySQL 5.1 Connector/C++ 参考,MySQL 数据库客户端操作的 C++ API。默认发布的 MySQL 安装包中包含其 C 语言的 API (MySQL Connector/C)。

SQLitehttp://www.sqlite.org/,轻量级的 SQL DBMS,没有 SQL 的服务器端,单纯基于文件存储。提供 API 支持,使用户执行 SQL 语句来查询/操纵数据,Firefox 3 就使用 SQLite 保存其配置数据。

加解密 | Cryptographic

Crypto++Crypto++ Sourceforge Project,http://www.cryptopp.com/。C++ 封装的加解密算法库。Crypto++ 是各种算法的合集,包括对称密码、非对称密码、摘要算法。

OpenSSLhttp://www.openssl.org/。C API 的加解密算法库,以及 SSL 协议实现。OpenSSL 不只是加解密算法库,还包含网络功能(包括未使用和使用加密通道 SSL)和实用工具。

日志 | Logging

Log for C++ (Log4cpp)

Log4cpp 主要用于 C++ 程序中写日志,有着较强的跨平台移植能力。除了日志功能外,Log4cpp 中包括很多可移植的基础功能,例如:同步功能 (Condition, CriticalSection, Event, Mutex, Semaphore)、网络功能 (Socket, ServerSocket, DatagramSocket, SocketInputStream, SocketOutputStream)、文件监控 (FileWatchdog)、智能指针 (ObjectPtrT)、字符串处理 (StrictMath, StringHelper, StringTokenizer)、线程支持 等。

Boost.Loghttp://sourceforge.net/projects/boost-log/,用于日志记录的 Boost 库,目前没有放入 Boost 发布包中。

log4cxxhttp://logging.apache.org/log4cxx/,Apache 出的日志功能库。

gloghttp://code.google.com/p/google-glog/

Log4cplushttp://log4cplus.sourceforge.net/

Logging In C++http://www.drdobbs.com/,这是 DrDobbs 上的一篇文章,教你怎么写出一个 C++ Logging 功能类。

函数式编程 | Functional Programming

Boost.LambdaBoost.Lambda 是 Boost 提供的函数式编程特性。

The Functional C++ Library (FC++)http://www.cc.gatech.edu/,用模板库来实现 C++ 的函数式编程。

FACT!http://www.fz-juelich.de/,另一个实现 C++ 函数式编程的模板库。

杂项 | MISC

CppUnitCppUnit Sourceforge Project,一个 C++ 的单元测试框架,由 JUnit 移植而来,使用派生测试类的方式产生测试用例。

时间: 2024-12-08 14:04:15

C++ 著名程序库 概览的相关文章

C++著名程序库的比较

转载出处:http://www.acejoy.com/ace/thread-3777-1-1.html 1.C++各大有名库的介绍——C++标准库 2.C++各大有名库的介绍——准标准库Boost3.C++各大有名库的介绍——GUI4.C++各大有名库的介绍——网络通信5.C++各大有名库的介绍——XML6.C++各大有名库的介绍——科学计算7.C++各大有名库的介绍——游戏开发8.C++各大有名库的介绍——线程9.C++各大有名库的介绍——序列化10.C++各大有名库的介绍——字符串11.C+

C++著名程序库的比较和学习经验

内容目录:1.C++各大有名库的介绍——C++标准库2.C++各大有名库的介绍——准标准库Boost3.C++各大有名库的介绍——GUI4.C++各大有名库的介绍——网络通信5.C++各大有名库的介绍——XML6.C++各大有名库的介绍——科学计算7.C++各大有名库的介绍——游戏开发8.C++各大有名库的介绍——线程9.C++各大有名库的介绍——序列化10.C++各大有名库的介绍——字符串11.C++各大有名库的介绍——综合12.C++各大有名库的介绍——其他库 在 C++中,库的地位是非常高

C++著名程序库的比较和学习经验 (转)

转自:http://www.open-open.com/lib/view/open1328670468108.html 内容目录: 1.C++各大有名库的介绍——C++标准库 2.C++各大有名库的介绍——准标准库Boost 3.C++各大有名库的介绍——GUI 4.C++各大有名库的介绍——网络通信 5.C++各大有名库的介绍——XML 6.C++各大有名库的介绍——科学计算 7.C++各大有名库的介绍——游戏开发 8.C++各大有名库的介绍——线程 9.C++各大有名库的介绍——序列化 10

c++内存管理学习纲要

本系列文章,主要是学习c++内存管理这一块的学习笔记. 时间:6.7-21 之下以技术内幕的开头语,带入到学习C++内存管理的技术中吧: 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,因此要想成为C++高手,内存管理一关是必须要过的! 笔记汇总: 1.C++内存管理学习笔记(1) 2.C++内存管理学习笔记(2) 3.C++内存管理学习笔记(3) 4.C++内存管理学习笔记(4) 5.C++内存管理学习笔记(5) 6.C++内存管理学习笔记(6) 7.C++内存管理学习笔记(7

More Effective C++ 条款23 考虑使用其他程序库

1. "理想的程序库应该小,快速,威力强大,富有弹性,有扩展性,直观,可广泛运用,有良好支持,使用时没有束缚,而且没有'臭虫'".但实际上这种程序库是不可能实现的:要针对速度和大小做优化,往往要牺牲移植性;要有丰富的机能,结果可能不够直观......一个程序库往往要权衡各方面得失,采取折中的方法来实现. 2. 不同的程序库侧重点可能不一样,即使两个程序库机能类似,也可能有不同的性能表现. 考虑iostream和stdio程序库,stdio提供的I/O操作速度通常比iostream快,可

Boost程序库完全开发指南——深入C++“准”标准库(第3版)

内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Boost 社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理.正则表达式.容器与数据结构.并发编程.函数式编程.泛型编程.设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简捷.优雅.灵活和高效. <Boost程序库完全开发指南——深入C++“准”标准库(

开源跨平台数据格式化框架概览

说到数据格式化框架,就不得不提到 Google 的 Protocol Buffers,Facebook 的 Thrift,还有 Apache Hadoop 推出的 Avro.Microsoft 最近开源的 Bond 也是一种用于数据格式化的可扩展框架,其适用的应用场景包括服务间通信.大数据存储和处理等. 为什么会有这么多关于数据格式处理的框架?它们都在解决什么问题呢?我们先来观察一下典型的服务间通信的结构. 通常,在设计服务间通信时,我们所要面对的基本问题有: 如何传输数据? 使用什么协议通信?

脚本化CSS(一) - 之CSS概览

一.概览 CSS定义了属性以指定字体.颜色.外边距.边框.背景图片.文本对其方式.元素尺寸和元素位置. 1 font-weight:bold; 2 margin-left:10%; /*左边距是页面宽度的10%*/ 3 text-indent:.5in; /*1/2英寸缩进*/ 4 font-size:12pt; /*字体尺寸12pt*/ 样式的引用方法: 1.内联样式 2.用<style>和</style>标签把一个CSS样式表抱起来放在<head>标签里 3.保存在

PHP整体概览

PHP概览及基础入门 1.PHP面向对象 2.smarty 3.AJax 4.PHP访问MYSQL数据库 5.PHP Date()函数 6.PHP正则表达式(PCRE) 7.PHP异常处理 8.PHP错误处理 9.PHP Sessions 10.PHP Cookie 11.文件处理 12.包含文件 13.命名空间(namespace) 14.魔术变量 15.函数 16.循环 17.超级全局变量 18.数组排序 19.数组 20.条件语句 21.运算符 22.字符串变量 23.常量 24.数据类型