boost一些常用库(数据结构,迭代器,算法及字符串) 简单介绍
原文地址: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一些常用库(数据结构,迭代器,算法及字符串) 简单介绍相关推荐
- 【算法】常用的数据结构与算法
学习了王争老师的数据结构与算法之美之后,比较有感触,他把我们常用的数据结构和算法都讲了一遍,而且讲的还不错.整理汇总一下作为笔记. 一.复杂度分析 非常重要.我们必须掌握,基本上要做到,简单代码能很快 ...
- 【算法基础】常用的数据结构与算法
学习了王争老师的数据结构与算法之美之后,比较有感触,他把我们常用的数据结构和算法都讲了一遍,而且讲的还不错.整理汇总一下作为笔记. 一.复杂度分析 非常重要.我们必须掌握,基本上要做到,简单代码能很快 ...
- 一篇关于 JS 常用的数据结构与算法万字总结
一.前言 首先,为什么我会学习数据结构与算法呢,其实主要是有两方面 第一,是我在今年的flag里明确说到我会学这个东西 第二,学了这些,对自己以后在工作或者面试也会带来许多好处 然后,本文是最近学习的 ...
- 游戏制作中的大宝剑---常用的数据结构与算法
前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为了方便大家阅读,个人认为 ...
- 游戏开发中常用的数据结构和算法
转载Loving_初衷 前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为 ...
- 常用的数据结构和算法
一.数据结构 1.队列 一种先进先出的数据结构 2.栈 一种后进先出的数据结构 3.树 树的遍历算法: 先序遍历 中序遍历 后续遍历 层序遍历 4.图 图的遍历算法: 深度优先遍历算法 广度优先遍历算 ...
- Java数据结构和算法:字符串、数组和广义表
数组和广义表是与前述的线性表有所区别的数据结构.它们可以看成是线性表在下述含义上的扩展:线性表中的元素本身也是一个数据结构 字符串 字符串的定义.存储结构 字符串(string)是由n (n≥0) 个 ...
- 实验一 线性表的顺序存储与实现_程序员:数据结构与算法,线性表介绍
线性表 线性表(list):零个或多个数据元素的有限序列. 举个例子:一个班的小朋友,一个跟着一个排队,当中的每个小朋友都知道他前面的是谁,后面的是谁,如同一根线把他们串联起来.就可以称之为线性表. ...
- cmake字符串转数组_掌握常用的数据结构之数组和字符串
点击上方蓝字设为星标 每周一.三.五上午 8:30 准时推送 下面开始今天的学习- 数组和字符串 所谓数组,是有序的元素序列.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用 ...
最新文章
- 【laravel】laravel的基础学习笔记
- optee3.12.0 qemu_v8的环境搭建篇(ubuntu20.04)
- USTC English Club Note20171013(2)
- 利用DB Link两步搞定Oracle两个数据库间的表同步
- 尚学堂java 参考答案 第九章
- c# 空接合(??)运算符的运用
- python计算一个数的个各位上的数字之和
- Norflash寿命以及失效模式总结
- jquery加载完成后方法只执行一次_JavaScript的超级库--jQuery内容整理(3)
- react的事件机制
- 一文彻底搞懂App的Monkey稳定性测试
- bugku 杂项 流量分析(cnss)
- 【图像分割】基于Matlab Tsallis熵算法灰度图像分割【含Matlab源码 715期】
- QML 插件开发 Plugin封装
- Google翻译api接入及Java、Python实现
- 音视频基本概念:分辨率、帧速率、码流、采样位深、采样率、比特率
- Java实现阿里云企业邮箱发送邮件
- w7计算机用户密码设置,Win7开机密码怎么设置 Win7电脑设置开机密码图文教程
- bzoj3991 [SDOI2015]寻宝游戏 set
- JS基础----函数应用 案例
热门文章
- (转)数字格式化函数:Highcharts.numberFormat()
- Cocos2D研究院之CCNode详解(三)
- Chart.js学习
- C语言 int** 二重指针的理解
- SQL Server 2005中的分区表(四):删除(合并)一个分区
- 2011 - 12 - 12记录2011 - 12 - 11
- C#3.0笔记(一)预备知识之Delegate
- 机器学习基石-作业三-第2题分析以及通过H证明EIN的讨论
- windows media services 2008外网无法访问
- python字符串计算加减乘除代码_Python 70行代码实现简单算式计算器解析