原文地址:http://blog.csdn.net/jinzhuojun/article/details/51923337

C++强大的重要原因之一就是它的库。而boost就是这样一个包罗万象的C++库,同时它也是C++标准库的官方后备军。不仅实用,功能全,而且灵活,高效,质量高。无论是学习或项目,都是有力的工具。下面罗列了容器、算法等几个重要类别下的主要子库。其中的一些已经是目前比较主流的C++11标准,有些在进入标准库的过程中,未来可能成为标准库的一部分。有些虽然进了标准库,但boost中的实现提供了额外的特性。总之,在boost中可以看到C++标准发展的一些趋势。

数据结构,容器和迭代器

Any(Not C++11)

通过type erasure技术实现的可以存放任意类型的类型。类型boost::any的变量可以通过boost::any_cast<type>来转化成相应类型,如果类型与之前不匹配会抛出boost::bad_any_cast异常。boost::any大量使用内存动态分配,RTTI和虚函数,对性能可能会有影响。

Variant(Not C++11)

C++03 unions只能放POD,C++11可以放类似于std::string的对象,但需要自己管理构建和销毁,因此需要显示记录union里放的是什么,这样用起来就很累。为了克服这个缺点,boost::variant它维护了数组,编译期决定该数组长度。在赋值或是构造时,这些对象被in-place方式销毁,然后通过placement new创建。同样是基于type erasure技术,它不需要RTTI,效率上比Any快。配合boost::apply_visitor()可以实现visitor模式。

Array(C++ 11)

元素为同样类型的数组的模板类,包含个数信息。与vector等容器相比,它的元素个数动态不能变。它拥有和STL容器类似的成员函数。提供这些优点的同时,性能又和C数组相当。

Tuple(C++11)

与std::pair类似,只是它可以表示多元组。与array不同的是其中的元素类型可以不同。用make_tuple()创建。用boost::tie()可以创建元组的nonconst reference,这样可以作为lvalue用于赋值等。tuple主要是为了简化template programming。如果一个结构体只用一两次,就不用定义成struct了。

Unordered(C++11)

提供了unordered_map, unordered_set等基于hash表的容器实现,对于要经常查找的场合比较适用。

Bitmap(Not C++11)

不是位图库,是用于value同时也是key的容器。大部分的用于索引的容器都是<key, value>的结构,但有时希望元素中的两个值互为索引。当然你可以选择用两个容器替代它,但一般来说会用更多内存。

MultiIndex(Not C++11)

用于可以有多个index的容器,类似于数据库中的表。可以指定每个index的属性,比如unique,sorted等。

Container(Not C++11)

提供一些五花八门的容器,比如stable_vector, slist(C++11有类似的forward_list), static_vector, small_vector, flat_[multi]map/set(基于vector实现的set和map)等。

ICL(Not C++11)

提供了两种基于interval的容器:interval_set和interval_map。它们可以方便地存放interval元素并对其进行相应操作。

Circular Buffer(Not C++11)

通用的循环缓冲实现。有空间优化版本(Lazily分配内存)。

Dynamic Bitset(C++11)

用于表示一系列的bit位。重载operator[]使之可以方便地访问其中某一bit,另外还有如&, |, <<等各种bitwise operator提供。C++11中的std::bitset和它很类似。

Intrusive(Not C++11)

Intrusive的数据结构在c中被大量使用。而相较而言,C++中,比如STL中的容器大多不是intrusive的,即其中的元素不用包含用于容器管理的数据。该库提供了基于intrusive的如list, set, splaytree, treap, rbtree, hashtable, avltree等数据结构。

MultiArray(Not C++11)

用于多维数组,即矩阵的存储和处理。比C++中类似std::array<std::array<int, n>, m>或std::vector<std::vector<>>的方式更方便高效。

Property Map(Not C++11)

最初来源于Boost Graph Library中,需要property map接口来访问图中顶点和边的相关数据。后来发展成通用库用于描述模板参数需求的工具。本质上它是基于下层数据结构(如std::map)的用于映射key object到value object的一系列concept。

Property Tree(Not C++11)

提供了树型的数据存储结构,其中的元素可以通过path来查找,有点像trie树。尤其适合configuration数据的处理。还可以方便得从XML, JSON文件中解析和生成树型结构。

Heap(Not C++11)

priority queue的实现。与STL中的std::priority_queue相比,它提供了更多功能及更多特性(如可遍历,可合并,可比较,可变,稳定等 )。

PointerContainer(Not C++11)

包含了ptr_array, ptr_vector, ptr_set, ptr_multimap等,用于将堆分配的对象指针放在容器内。用它可以免除自己定义compare函数,也可以少加reference操作,使代码更简洁。

Range(Not C++11)

提供了用两个iterator表示数据结构子部分的方法。比如表示子字符串,这样可以有效避免拷贝。同时提供了比如copy, merge, remove, rotate, reverse, replace, transform等通用算法。

算法 

Geometry(Not C++11)

该库主要用于解决几何问题。算法涉及segment, multi_point, centroid, convex hull, bounding box等,提供了R-Tree等数据结构的实现。在游戏开发,图形学,机器人等众多领域都能用到。

Algorithm(Partially C++11)

提供了all_of, any_of, partition_copy,KMP,min-max等基本通用算法。其中很多已是C++11标准。

Polygon(Not C++11)

提供关于平面多边形几何数据的算法 。比如多边形集合的各种集合运算, connectivity extraction,  sweep line algorithm(for Voronoi diagrams)等算法。这些算法在GIS, CAD,VLSI等领域起到很大作用。

Sort(Not C++11)

提供了高性能排序的一种通用实现spreadsort,并对几种常见数据类型作了specialization。它是一种采用了radix和基于比较排序的混合算法,比标准库里的std::sort()在大多数情况下更高效(元素个数多或者大,本来有序,比较函数慢等情况)。

Graph(Not C++11)

实现了一些常用的图算法,比如拓扑排序,BFS, DFS, Dijkstra shortest path等等。配合Graphviz等工具还可以将数据图形化。

字符串处理

LexicalCast(Not C++11) & NumericConversion(Not C++11) & Convert (Not C++11)

boost::lexical_cast用于字符串到整数类型,或者相反方向的转换。当失败时抛boost::bad_lexical_cast异常。与同类方法相比,它比C中的strtol有更少的限制,比scanf更安全易用,比C++中的stringstream更简洁。 配合std::locale还可以根据localization进行转换。

std::numeric_cast用于数字到数字的转换,用于替换static_cast,这样如果转换失败会抛异常(比如overflow)。

Convert在LexcalCast的概念上扩展了它的功能,比如format和locale支持,更好的错误检测等。

StringAlgorithm(Not C++11)

提供了一系列字符串相关的算法 。比如case insensitive comparison,search/replace,split,trim等功能。

Spirit(Not C++11)

它可以用于写文本的parser。相比bison等专业的工具,它更轻量级。语法类似于EBNF。

RegEx(C++11)

正则表达式处理。用boost::regex可以动态生成对象进行正则表达式的解析和编译,也可以做基于正则表达式的替换和查找。

Tokenizer(Not C++11)

更灵活易用的方法将字符串分割成token。它将tokenizer的policy抽象成TokenizerFunction,并且提供几种model分别基于char, excaped list和offset。它比C中的strtok提供更细致的控制。

Locale(Not C++11)

提供跨平台的本地化支持。

Xpressive(Not C++11)

正则表达式模板库。支持运行时或编译时的正则表达式处理,还支持递归定义。

boost一些常用库(数据结构,迭代器,算法及字符串) 简单介绍相关推荐

  1. 【算法】常用的数据结构与算法

    学习了王争老师的数据结构与算法之美之后,比较有感触,他把我们常用的数据结构和算法都讲了一遍,而且讲的还不错.整理汇总一下作为笔记. 一.复杂度分析 非常重要.我们必须掌握,基本上要做到,简单代码能很快 ...

  2. 【算法基础】常用的数据结构与算法

    学习了王争老师的数据结构与算法之美之后,比较有感触,他把我们常用的数据结构和算法都讲了一遍,而且讲的还不错.整理汇总一下作为笔记. 一.复杂度分析 非常重要.我们必须掌握,基本上要做到,简单代码能很快 ...

  3. 一篇关于 JS 常用的数据结构与算法万字总结

    一.前言 首先,为什么我会学习数据结构与算法呢,其实主要是有两方面 第一,是我在今年的flag里明确说到我会学这个东西 第二,学了这些,对自己以后在工作或者面试也会带来许多好处 然后,本文是最近学习的 ...

  4. 游戏制作中的大宝剑---常用的数据结构与算法

    前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为了方便大家阅读,个人认为 ...

  5. 游戏开发中常用的数据结构和算法

    转载Loving_初衷 前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为 ...

  6. 常用的数据结构和算法

    一.数据结构 1.队列 一种先进先出的数据结构 2.栈 一种后进先出的数据结构 3.树 树的遍历算法: 先序遍历 中序遍历 后续遍历 层序遍历 4.图 图的遍历算法: 深度优先遍历算法 广度优先遍历算 ...

  7. Java数据结构和算法:字符串、数组和广义表

    数组和广义表是与前述的线性表有所区别的数据结构.它们可以看成是线性表在下述含义上的扩展:线性表中的元素本身也是一个数据结构 字符串 字符串的定义.存储结构 字符串(string)是由n (n≥0) 个 ...

  8. 实验一 线性表的顺序存储与实现_程序员:数据结构与算法,线性表介绍

    线性表 线性表(list):零个或多个数据元素的有限序列. 举个例子:一个班的小朋友,一个跟着一个排队,当中的每个小朋友都知道他前面的是谁,后面的是谁,如同一根线把他们串联起来.就可以称之为线性表. ...

  9. cmake字符串转数组_掌握常用的数据结构之数组和字符串

    点击上方蓝字设为星标 每周一.三.五上午 8:30 准时推送 下面开始今天的学习- 数组和字符串 所谓数组,是有序的元素序列.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用 ...

最新文章

  1. 【laravel】laravel的基础学习笔记
  2. optee3.12.0 qemu_v8的环境搭建篇(ubuntu20.04)
  3. USTC English Club Note20171013(2)
  4. 利用DB Link两步搞定Oracle两个数据库间的表同步
  5. 尚学堂java 参考答案 第九章
  6. c# 空接合(??)运算符的运用
  7. python计算一个数的个各位上的数字之和
  8. Norflash寿命以及失效模式总结
  9. jquery加载完成后方法只执行一次_JavaScript的超级库--jQuery内容整理(3)
  10. react的事件机制
  11. 一文彻底搞懂App的Monkey稳定性测试
  12. bugku 杂项 流量分析(cnss)
  13. 【图像分割】基于Matlab Tsallis熵算法灰度图像分割【含Matlab源码 715期】
  14. QML 插件开发 Plugin封装
  15. Google翻译api接入及Java、Python实现
  16. 音视频基本概念:分辨率、帧速率、码流、采样位深、采样率、比特率
  17. Java实现阿里云企业邮箱发送邮件
  18. w7计算机用户密码设置,Win7开机密码怎么设置 Win7电脑设置开机密码图文教程
  19. bzoj3991 [SDOI2015]寻宝游戏 set
  20. JS基础----函数应用 案例

热门文章

  1. (转)数字格式化函数:Highcharts.numberFormat()
  2. Cocos2D研究院之CCNode详解(三)
  3. Chart.js学习
  4. C语言 int** 二重指针的理解
  5. SQL Server 2005中的分区表(四):删除(合并)一个分区
  6. 2011 - 12 - 12记录2011 - 12 - 11
  7. C#3.0笔记(一)预备知识之Delegate
  8. 机器学习基石-作业三-第2题分析以及通过H证明EIN的讨论
  9. windows media services 2008外网无法访问
  10. python字符串计算加减乘除代码_Python 70行代码实现简单算式计算器解析