1. 转:https://www.mhftz.com/archives/42.html

      个人学习C/C++的开源代码:

      0.STL

      1.osmium

      2.leveldb

      3.glog

      4.redis

      个人使用的开源代码:

      1.rapidjson

      2.protobuf

      每个人每个时期都有所需要的lib,并且不同吧。

      个人觉得3d方面HDK(houdini 3d, houdini engine)库是和其他库完全不同的:
      HDK和其他库的区别就好像,其他库是初等数学,HDK是微积分。
      这个库牛逼到:
      比如你做一个舰船模型,只要修改一个参数(不是两个参数),这个舰船就能自动,智能的从渔船变成军舰,乃至变成宇宙飞船。每个模型都有无数级别,无数种变换。

      并且HDK在qt上可以和qt的python交互,使用很方便。

    2. 陈宇飞说道:

      还是要推荐一下脸书的folly,毕竟广告还是要打的 GitHub – facebook/folly: An open-source C++ library developed and used at Facebook.
      folly就是一个杂货铺,里面很多boost没有的东西。我最常用到的就是folly::to,虽然新标准里面都有这种数字/字符串的转换了,但是老版本编译器的话还是folly::to 方便
      folly还有各种各样的数据结构,比如MPMCQueue是一个多Consumer多Producer的queue,用起来非常方便,速度也快。AtomicList,AtomicUnorderedMap,AtomicStruct都是一个在高并发的情况下需要用到的数据结构
      如果你对里面的内部构造感兴趣,我写过一个关于folly里面各种数据结构的问,你可以看看你见过哪些令你瞠目结舌的C/C++代码技巧? – 陈宇飞的回答

    3. 王煦说道:

      泛用库Boost,界面库Qt,通信库ZeroMQ,视觉库OpenCV,并发库tbb,深度学习Caffe,序列化Protobuf ,加上一些cppformat之类的小库

    4. 慧航说道:

      写几个我最经常用的吧:

      1、科学家算GSL:GNU Scientific Library

      基本上能满足用C做科学计算的要求:

      The complete range of subject areas covered by the library includes,

      Complex NumbersRoots of PolynomialsSpecial FunctionsVectors and MatricesPermutationsSortingBLAS SupportLinear AlgebraEigensystemsFast Fourier TransformsQuadratureRandom NumbersQuasi-Random SequencesRandom DistributionsStatisticsHistogramsN-TuplesMonte Carlo IntegrationSimulated AnnealingDifferential EquationsInterpolationNumerical DifferentiationChebyshev ApproximationSeries AccelerationDiscrete Hankel TransformsRoot-FindingMinimizationLeast-Squares FittingPhysical ConstantsIEEE Floating-PointDiscrete Wavelet TransformsBasis splinesRunning StatisticsSparse Matrices and Linear Algebra

      从最优化 到 排序 到 线性代数、稀疏矩阵,功能是很全的。

      当然,有条件的可以用Intel的MKL:https://software.intel.com/en-us/intel-mkl/

      2、最优化工具包,NLopt:NLopt Reference

      一般简单问题GSL的最优化包也够用了,不过如果碰到有约束之类的问题,NLopt包是个不错的选择。

      3、OpenMP、OpenMPI

      不多解释了,两种不同类型的并行计算模型。

    5. 赵科进说道:

      这就比较多了,有一些一直就很有名思想先进我也用过,比如Qt

      还有一些比较老了,说出来有些倚老卖老,比如ATL,一个用于开发COM的模板库,还有MFC,WTL

      另外还有一部分在自己的项目某些模块中使用了,一直如雷贯耳但是没太多的直接用到,比如boost,这玩意影响了C++的发展,你说它牛不牛?

      还有opencv,华夏大地多少妹子爱它爱的不得了,虽然她们自己可能未必知道那些美颜,脸部识别多少都跟这玩意有些关系。

    6. 诸葛不亮说道:

      越来越nb的STL,在尝试从Qt迁移中

      直接影响cpp发展的,除了GUI等偏业务的,其他几乎啥都干的库,boost,目前在入门中

      nb程度直追boost的folly,不过暂时没空学

      Qt,同样是万能类库,同时还是强大的GUI库

      大数字运算库GMP

      计算机视觉库OpenCV,大学时玩过,不是一般的nb

    7. 知乎用户说道:

      http客户端curl

      http服务器 crow

      gzip压缩zlib

      json序列化jsoncpp

      二进制序列化protobuf

      嵌入式数据库sqlite

      日志库glog

      参数解析库gflags

      消息队列zmq

      rpc库brpc

      tcp网络库evpp

      3d仿真osg

      图形图像opencv

      stl,boost,qt就不用说了。

      不是我说,大家老老实实做调包侠,赚钱才是王道。

      windows下开发,强烈推荐vcpkg,了却找第三方库,编译第三方库的烦恼。

    8. Chen Moore说道:

      愚以为STL已经应该算做C++的一部分了……

      自己最常用的几个:
      curl
      zlib
      sqlite
      opencv

    9. foruok说道:
      1. 应用开发框架Qt,我的最爱,我还写了两本相关的书,《Qt Quick核心编程》和《Qt on Android核心编程》。优雅的信号与槽,强大的界面类库,跨平台。
      2. CEF(Chromium Embedded Framework),使用网页做富客户端的绝佳选择,基于Chromium,可以方便嵌入到你的应用中。类似的还有 Electron 。
      3. WebRTC,非常赞的框架,做音视频通信绕不开的。
      4. TinyXml,小巧的C++ XML库,几个源文件,直接加入到项目中就可以用
      5. Protobuf,Google的,网络通信,非常赞,方便序列化和结构化,流量又小
      6. FreeImage,强大好用的图形库
      7. Libevent,轻量级的基于事件驱动的高性能的开源网络库
      8. ffmpeg,多媒体开发类库的无冕之王
    10. sunoru说道:

      说几个跟化学相关的:

      1. Open Babel,C++ 开发的,GPLv2。自由在几十种分子结构的文件格式之间转换,还带有简单的优化、绘图功能。虽然我觉得最好用的是它的 Python binding。

      2. Gromacs,当前最流行的分子动力学模拟库,高性能,针对几乎所有平台都有优化。原本是 C 语言开发的,现在在向 C++ 迁移,已经完成大半了。是最好用的吗?按照我同事的话来讲就是“首先你要有个对手才可以比好不好用呀”。这个和 OpenBabel 一样,虽然本身也是一个软件,但作为 C++ 的库链接到你自己写的程序里会相当相当好用。对了,它还是 LGPL 开源的。

      3. BALL Project,主体是 C++ 开发的,有少量 C 代码。它是一个主要为分子生物学和分子建模而生的工具库。有一个叫做 View 的扩展用来可视化结构文件很不错。提供类似功能的库其实有很多,比如 OpenMM 以及上面提到的那两个,不过我觉得 BALL 还是最全面健壮的,还支持扩展。最关键的,它也是 LGPL 协议开源的。

    11. Jaco说道:

      RapidJSON: 首页

      这个json处理工具性能优良。这个是已经在工作中使用过的。

      在推荐一个工作中没有使用,但是非常不错的开源项目,值得你学习: Seastar

    12. laike9m说道:
    13. 知乎用户说道:

      来几个不常见但是很变态的库吧:

      bundle: 把几乎所有常见的压缩库封装成了一个库, 接口完全统一, 想用哪个用哪个.

      就一个h和一个巨TM大的cpp文件,巨好使巨方便.

      r-lyeh-archived/bundle

      Celero: 简单清晰的benchmark库, 特点就是简单易用没有废话.

      DigitalInBlue/Celero

      getopt: 解析命令行输入参数的库, 好使! 没废话! 就俩文件.

      r-lyeh-archived/getopt

      stb_image: 常见图片格式加载库, 就一个巨大无比的头文件

      stb_truetype: 常见字体加载库, 就一个巨大无比的头文件, 觉得freetype大的可以用它.

      都在这: nothings/stb

      better-enums: 编译期实现的enum扩展功能,包括enum和字符串互转等等. 感觉比较重量级, 我一般是不用的, 但有时候没它还真是别扭, 尤其是需要把一个enum序列化的时候.

      aantron/better-enums

      Catch2: 著名的单元测试框架, 那么它和boost或者google的单元测试框架有什么不同呢?

      就在于它首先是header only的, 其次是没有废话,直击要害! 你要测试对吧? 给你!

      catchorg/Catch2

      uchardet: 实现猜字符串编码的功能, 例如输入一个不知道编码的文本文件, 它可以帮你”猜” 这个文件的编码是什么. 和python里的uchardet功能基本一样.

      BYVoid/uchardet

      win-iconv: iconv库是一个字符集编码转换的库, 在linux和mac下均是原生字符转换库. 但windows上并不是自带的. 那么就会导致在windows上编译iconv有点浪费. 因为windows显然已经自带字符集转换的功能了. 那么这个库的作用就是用windows api来实现和iconv库一模一样的接口. 这样编译出来比较小. 从此字符转换不是梦.

      win-iconv/win-iconv

      freetype-gl: open gl 上实现的freetype. 不过我个人没用过… 不知道好不好用. 但当你需要在opengl上下文中渲染字体的时候, 你可能用得着它.

      rougier/freetype-gl

      nanovg: 基于openGL/DX/metal的2d绘图库. 绘图效率高, 接口清晰. 主版本是基于openGL的, 但有DX,metal等分支. 前端接口还有python和lua的. 个人感觉不错.

      memononen/nanovg

      imgui: 大名鼎鼎的imgui, 你可能会问在有一堆GUI框架的情况下为什么我们需要imgui? 因为它是immediate mode的. 个人认为是几个immediate mode的GUI框架里最好的. 详细见它的页面介绍.

      r-lyeh-archived/imgui

      spdlog: logger库, 重点推荐! 为什么呢? 因为好使! 没有废话. 而且是header only的.

      gabime/spdlog

      ffts: 很好使的FFT库, 和fftw的不同在于用着是真方便! 而且难能可贵在于速度居然真不比fftw慢.

      linkotec/ffts

      fmt: formatting库, 又小又好使! 太好使了!

      fmtlib/fmt

      最后是恐怖的Amalgamate.

      vinniefalco/Amalgamate

      它是干嘛的呢? 它是专门用来把其他库”封装成”一个cpp和一个h文件的工具. 比如说freetype里有几十个h几十个cpp, 用起来觉得麻烦的话, 就写个配置文件然后用它跑一下, 立即就可以把freetype的这些cpp和h文件变成仅仅两个巨大无比的cpp和h文件. 再重复一遍, 巨大无比!! 这便是传说中的unity build…. 目前github上已经有很多的人开始用它来封装一些常见的库了.

      那么这么做好不好呢, 我也不知道. 前文中提到的bundle库就是用它把N多库合并到一个cpp里的.

      这个工具的作者vinniefalco还写了beast库, 目前已收录进了boost里.

      freetypeAmalgam: 利用上面的工具把整个freetype封装成了一个h和一个cpp, 想用freetype又懒得编译和配置的人就把这两个文件往项目里一拖, 就可以用freetype了.

      vinniefalco/FreeTypeAmalgam

    14. 张友东说道:

      做存储, 数据库系统方面的开发,主要用到

      * grpc/libevent/libev/libasio 实现高性能网络服务器
      * protobuf 数据结构序列化/反序列化,方便数据交换
      * LevelDB/RocksDB 嵌入式KV数据库
      * snappy/zlib/lz4 数据压缩,解压缩
      * jemalloc/tcmalloc 高效内存分配器,尤其多线程场景
      * jerasure Reed Solomon编解码,给存储系统实现erasure code
      * murmurhash… 实现hash摘要
      * crc32 数据存储或传输时的数据校验
      * cJSON 解析json格式配置文件
      * libBSON JSON序列化/反序列化,MongoDB使用这种格式存储数据
      * boost 功能丰富的C++基础库,轻度使用,C++11/14后基本不用了。
      * libRedis redis是一个数据库服务,并不是单独的库,但其代码精简,质量非常高,里面很多代码都可以拿出来直接复用,比如网络,各种数据结构的实现。

    15. Irons Du说道:

      我推荐一个貌似没被提及的:https://github.com/Taywee/args

      用于解析命令行参数,个人觉得比gflags高级多了。

    16. Xi Yang说道:

      我来布道GNU的那一套吧。

      Glib:C基础库,提供了容器、原子操作、线程、抛异常、字符串等基础设施。

      GObject:在C里面实现比C++更彻底的对象系统。Gtk3的GObject有很彻底的introspection能力,比如运行时自动生成脚本语言绑定。代价是写类型需要一堆恶心的宏。

      Cairo:2D绘图库,功能全面,支持多种绘图表面,包括内存位图、矢量文件(PDF、PostScript、SVG)、窗口表面。主要问题是在Windows上的屏幕绘图是用GDI实现的,神特么慢。

      Gtk:GUI开发架构。它几乎所有的玩意都可以绑事件,事件化的程度比Qt Widgets还要彻底。Gtk Builder使用布局描述XML在运行时构建GUI,并且自动绑定回调函数(代价是必须暴露回调函数到符号表)。基于GObject既是它的好处(彻底的事件化),也是它的缺点(写个新Gtk类型需要一堆恶心的宏)。

    17. zpan说道:

      GLib

      FFmpeg

      fftw

      boost

      Catch2

      libuv

      http_parser

      OpenSSL

      libsodium

      MsgPack

      cblas

      SQLite

      Redis

      cJSON

    18. 知乎用户说道:

      说几个不是库的

      OpenAFS,著名的分布式文件系统。

      Memcached,没人不知道吧

      C++ B-tree

      https://github.com/goossaert/hashmap hashmap

      http://thrust.github.io 这是个并行库

      opencl不用我说了吧。

      openmp也不用说吧

      leveldb rocksdb

      memtrack 一看名字就知道干啥吧。

      cppcheck静态检查的

      addressantizer valgrind 查内存泄漏的

      ace是垃圾,我不用它。

      v8 js引擎

      crow cpp版的flask,web框架

      peloton数据库,Self-Driving DB

转: 工作中用的C++库的更多相关文章

  1. Liu Junqiao:工作中用到的命令以及问题汇总

    工作中用到的命令以及问题汇总 2019-11-29 查看系统运行时间,这个问题是因为我们在阿里云上有个机器,在某一天发现这台机器上有的服务莫名奇妙的停了,然后排查时怀疑机器被重启过用如下如下命令查看了 ...

  2. 工作中用到的linux命令

    都是工作中用到的,解决问题至上,不求甚解,怕再忘了,所以记录一下,勿喷. .log |,,,,|,| 先说一下这条命令: cat:打印文件内容 grep:查找,用到的有\s匹配空白字符 sed:刚用到 ...

  3. linux下查看动态链接库依赖关系的命令 x86: ldd *.so arm: arm-linux-readelf -d *.so 实际例子: 以项目中用到的库librtsp.so分析: lijun@ubuntu:~/workspace$ arm-hisiv100nptl-linux-ld -d librtsp.so arm-hisiv100nptl-linux-ld:

    linux下查看动态链接库依赖关系的命令 x86:ldd    *.so arm:arm-linux-readelf    -d    *.so 实际例子:以项目中用到的库librtsp.so分析:l ...

  4. ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库

        在网络篇①中,博主主要讲解了Arduino上开发ESP8266的插件库 Arduino Core For ESP8266.但是,并没有讲到关于这个模块的工作模式,所以本篇讲着重讲解ESP826 ...

  5. 记录工作中用到的linux命令

    日常工作中会对centos进行操作,总是会有一些常用的命令记不住,特开一贴,记录那些命令,学而时习之.   RPM操作类命令:   查看RPM安装路径: 1.rpm -qa|grep Memcache ...

  6. 工作中用Git对项目进行管理

    前言 之前一直是用svn来管理代码的,今天第一次用git来管理代码,从安装.上传代码过程中遇到了很多问题,Github中建的repository之前还是https协议,最后不知道怎么又变成了git协议 ...

  7. 工作中用到和应该知道的eclipse快捷键

    Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(Ecl ...

  8. 最近工作中用到的Linux指定 PS Kill netstat解释

    1.ps详解点击如下链接 https://jingyan.baidu.com/article/fec4bce2479f05f2618d8b80.html 2.kill kill命令用来删除执行中的程序 ...

  9. 工作中用到的oracle字符串分割整理

    oracle部分: 定义类型(用于字符串分割): create or replace TYPE "STR_SPLIT" IS TABLE OF VARCHAR2 (4000); 字 ...

随机推荐

  1. Nginx基础优化

    Nginx基础优化 1.隐藏nginx header版本号 1.1查看版本号 [root@Nginx ~]# curl -I http://www.yunwei.cn HTTP/1.1 200 OK ...

  2. Numpy_key_point

    Numpy使用中的一些注意点: ------------------------------------------------------------------------------------ ...

  3. codeforces 1182E Product Oriented Recurrence 矩阵快速幂

    题意:设f(n) = c ^ (2n - 6) * f(n - 1) * f(n - 2) * f(n - 3), 问第n项是多少? 思路:官方题解:我们先转化一下,令g(x) =  c ^ x * ...

  4. 【TJOI/HEOI2016】求和

    题面 题目分析 \[ \begin{split} \sum_{i=0}^n\sum_{j=0}^iS(i,j)\cdot 2^j\cdot j!&=\sum_{j=0}^n2^j\cdot j ...

  5. Map集合类(二.其他map集合jdk1.8)

    java集合笔记一 java集合笔记二 java集合笔记三 1.hashtable(线程安全) 1.存储数据为数组+链表2.存储键值对或获取时通过hash值取模数组长度确定节点在数组中的下标位置 in ...

  6. Delphi 堆栈 [ heap(堆) 和 stack(栈) ]

    程序需要的内存空间分为 heap(堆) 和 stack(栈); heap(堆) 是自由存储区, stack(栈) 是自动存储区; 使用 heap 需要手动申请.手动释放, 使用 stack 是自动申请 ...

  7. sql 聚合查询

    如果我们要统计一张表的数据量,例如,想查询students表一共有多少条记录,难道必须用SELECT * FROM students查出来然后再数一数有多少行吗? 这个方法当然可以,但是比较弱智.对于 ...

  8. Android 在OnCreate()中获取控件高度与宽度

    试过在OnCreate()中获取控件高度与宽度的童鞋都知道,getWidth()与getHeight()方法返回是0,具体原因 看一下Activity的生命周期 就会明白. 上代码: 方法一: int ...

  9. NX二次开发-Block UI C++界面Specify Point(指定点)控件的获取(持续补充)

    Specify Point(指定点)控件的获取 NX9+VS2012 #include <uf.h> #include <uf_ui.h> UF_initialize(); / ...

  10. 一道腾讯面试题:如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?布隆过滤器

    何为布隆过滤器 还是以上面的例子为例: 判断逻辑: 多次哈希: Guava的BloomFilter 创建BloomFilter 最终还是调用: 使用: 算法特点 使用场景 假设遇到这样一个问题:一个网 ...