boost介绍

2023-11-11

boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。不过对比STL,boost更加实用。STL集中在算法部分,而boost包含了不少工具类,可以完成比较具体的工作。

 

    boost主要包含一下几个大类

字符串及文本处理、容器、迭代子(Iterator)、算法、函数对象和高阶编程、

泛型编程、模板元编程、预处理元编程、并发编程、数学相关、纠错和测试、

数据结构、输入/输出、跨语言支持、内存相关、语法分析、杂项。

 有一些库是跨类别包含的,就是既属于这个类别又属于那个类别。

 

    在文本处理部分,conversion/lexcial_cast类用于“用C++”的方法实现数字类型和字符串之间的转换。 主要是替代C标准库中的 atoi、 itoa之类的函数。当然其中一个最大的好处就是支持泛型了。 

    format库提供了对流的“printf-like”功能。printf里使用%d、%s等等的参数做替换的方法在很多情况下还是非常方便的,STL的iostream则缺乏这样的功能。format为stream增加了这个功能,并且功能比原始的printf更强。 

    regex,这个不多说了,正则表达式库。如果需要做字符串分析的人就会理解正则表达式有多么有用了。 

    spirit,这个是做LL分析的框架,可以根据EBNF规则对文件进行分析。(不要告诉我不知道什么是EBNF)。做编译器的可能会用到。一般人不太用的到。 

    tokenizer库。我以前经常在CSDN上看到有人问怎么把一个字符串按逗号分割成字符串数组。也许有些人很羡慕VB的split函数。现在,boost的tokenizer也有相同的功能了,如果我没记错的话,这个tokenizer还支持正则表达式,是不是很爽? 

    array: 提供了常量大小的数组的一个包装,喜欢用数组但是苦恼数组定位、确定数组大小等功能的人这下开心了。 

    dynamic_bitset,动态分配大小的bitset,我们知道STL里有个bitset,为位运算提供了不少方便。可惜它的大小需要在编译期指定。现在好了,运行期动态分配大小的bitset来了。 

    graph。提供了图的容器和相关算法。我还没有在程序中用到过图,需要用的人可以看看。 

    multi_array提供了对多维数组的封装,应该还是比较有用的。 

    并发编程里只有一个库,thread,提供了一个可移植的线程库,不过在Windows平台上我感觉用处不大。因为它是基于Posix线程的,在Windows里对Posix的支持不是很好。 

    接下来的 数学和数值 类里,包含了很多数值处理方面的类库,数学类我也不太熟,不过这里有几个类还是很有用的,比如rational分数类,random随机数类,等等。 

    static_assert,提供了编译器的assert功能。 

    test库,一个单元测试框架,非常不错。 

    concept_check提供了泛型编程时,对泛型量的一点检查,不是很完善,不过比没有好。 

    数据类型类any,一个安全的可以包含不同对象的类。把它作为容器的元素类型,那么这个容器就可以包含不同类型的元素。比用void *要安全。 

    compressed_pair,跟STL里的pair差不多。不过对空元素做了优化。 

    tuple,呵呵,也许是某些人梦寐以求的东西。可以让函数返回多个值。 

    跨语言支持:python,呵呵,好东东啊,可以将C++的类和函数映射给python使用。

以下为几个CSDN上的关于boost.python的中文资料:http://dev.csdn.net/article/19/19828.shtm,http://dev.csdn.net/article/19/19829.shtm,http://dev.csdn.net/article/19/19830.shtm,http://dev.csdn.net/article/19/19831.shtm

    pool:内存池,呵呵,不用害怕频繁分配释放内存导致内存碎片,也不用自己辛辛苦苦自己实现了。 

    smart_ptr:智能指针,这下不用担心内存泄漏的问题了吧。不过,C++里的智能指针都还不是十全十美的,用的时候小心点了,不要做太技巧性的操作了。 

    date_time,这个是平台、类库无关的实现,如果程序需要跨平台,可以考虑用这个。 

     timer,提供了一个计时器,虽然不是Windows里那种基于消息的计时器,不过据说可以用来测量语句执行时间。 

     uitlity里提供了一个noncopyable类,可以实现“无法复制”的类。很多情况下,我们需要避免一个类被复制,比如代表文件句柄的类,文件句柄如果被两个实例共享,操作上会有很多问题,而且语义上也说不过去。一般的避免实例复制的方法是把拷贝构造和operator=私有化,现在只要继承一下这个类就可以了,清晰了很多。 

     value_initialized:数值初始化,可以保证声明的对象都被明确的初始化,不过这个真的实用吗?似乎写这个比直接写初始化还累。呵呵,仁者见仁了。 

     这里面除了regex、python和test需要编译出库才能用,其他的大部分都可以直接源代码应用,比较方便。其实这些库使用都不难。最主要的原因是有些库的使用需要有相关的背景知识,比如元编程、STL、泛型编程等等。

  btw: 还有 Graph 库,用于图数据的处理
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

boost介绍 的相关文章

  • Openlayers API-Select点击要素图层

    Select是交互事件中的一种 用于选择矢量图层上的几何图形 添加选择交互事件后 点击地图上的几何图形或者将鼠标移动到几何图形上时 将获取到几何图形的相关信息 我们可以将选择的几何图形进行高亮显示 使用起来很简单 首先创建一个Select对
  • Xcode MacOS与clang c++版本关系

    关于clang https en wikipedia org wiki Clang 7 September 2017 Clang 5 0 0 released 19 January 2018 Clang becomes default co
  • QT系列第2节 QT中元对象系统

    QT是在标准C 上进行了扩展 所以就有自己的特性 其中元对象系统就是其一 元对象系统有点类似于java和go语言中的反射 让我们在编程时解决问题多了些方法和思路 关于元对象可以简单总结出以下内容项 目录 一 元对象要点总结 二 示例代码 一
  • SVN的常见用法

    3 发生冲突后 执行 更新 操作后 对于发生冲突的文件 SVN会加上冲突标记 冲突解决 Tortoise 编辑冲突 找到这个文件 右键选择Edit conflicts 按钮 弹出编辑冲突的界面 手工将前一版本中的修改整合到自己的文件中 选择
  • apache2.4+php5.4 安装配置

    尝试一个新东西有时候会遇到很多问题 apache2 4 php5 4 安装完成后 记录下解决的办法 1 安装apache2 4需要 microsoft visual C 2010 x86 运行库 2 apache2 4 加载php5 4 需
  • 连接oracle出现ORA-12514错误

    1 PL SQL连接oracle出现ORA 12514错误 注意看图中画出的重点 2 java 连接的时候报错 连接URL option url jdbc oracle thin 47 97 11 138 1522 XE java sql
  • gitlab合并不同分支的(二)种方法 git merge 分支

    gitlab分支 git merge 合并 文章目录 gitlab分支 git merge 合并 前言 一 第一种gitlab工具合并的方法 二 代码提交进行合并 总结 前言 提示 遇到的问题 以前在公司的开发 多人开发的时候是在统一个 m
  • 微信小程序 -- ios 底部小黑条安全距离兼容解决方案(转载)

    在苹果 iPhoneX iPhone XR等设备上 可以看到物理Home键被取消 改为底部小黑条替代home键功能 微信小程序和 h5 网页需要针对这种情况进行适配 否则可能会遇到底部按钮或选项卡栏与底部黑线重叠的情况 如下图 在微信小程序
  • 原来还有linux kernel api

    linux kernel api http www gnugeneration com books linux 2 6 20 kernel api 居然有人将linux kernel api给列出来了 这样编写驱动程序就是和编写普通程序一样
  • 区块链行业前景还好吗?区块链技术有没有经过时间的检验?

    一直有人在发问 被各种科技大佬们炒得那么火热的区块链技术 说到底 跟我们普通的 市井小民 有什么切身的关系利益吗 各位大佬们一口一个 改变未来 革命未来 未来又在哪里 各种吃瓜群众们还在观望的时候 区块链行业的小伙伴们 已经将区块链技术慢慢
  • Java:数值-字符串转换(String转Double)

    代码如下 String ss 3 141592653 double value Double valueOf ss toString
  • 【JavaScript——牛客网算法No.HJ26】字符串排序(字符串里英文字母按字典顺序重新排列,其他字符保持原位)附:详细排坑经历

    No HJ26 字符串排序 problem description 编写一个程序 将输入字符串中的字符按如下规则排序 规则 1 英文字母从 A 到 Z 排列 不区分大小写 如 输入 Type 输出 epTy 规则 2 同一个英文字母的大小写
  • 4.1.3.1Spring源码解析——createBean方法细节之doCreateBean

    先贴代码 doCreateBean方法位于AbstractAutowireCapableBeanFactory方法中 前面已经解析了CreateBean方法 可以点这里传送CreateBean方法解析 protected Object do
  • 剖析算法:解决问题的艺术

    前言 一 实战中的精选算法 工作和学习的无法替代的助手 1 1 效率之王 排序算法 如快速排序和归并排序 1 2 寻路之魔 图算法 如 Dijkstra 算法和贝尔曼 福特算法 1 3 问题解决之神 动态规划算法在复杂问题中的应用 1 4
  • 张量(二):张量分解(tensor decomposition)

    与矩阵分解一样 我们希望通过张量分解去提取原数据中所隐藏的信息或主要成分 当前主流的张量分解方法有CP分解 Tucker分解 t SVD分解等 更新的方法大多是在他们的基础上做进一步的改进或引用 因此 张量分解也是张量算法的基础 下面分别做
  • python 线程池使用

    前段时间发现了一个 人工智能学习网站 通俗易懂 风趣幽默 分享一下给大家 学习链接 文章目录 线程池使用 1 线程池介绍 2 使用方法 2 1 threadpool 2 2 ThreadPoolExecutor submit as comp
  • 9-数据结构-单链表头插法尾插法

    问题 单链表头插法与尾插法 思路 头插法 类似于前面的在末位置前 插入元素 最后创建完为逆序 尾插法 则是定一个尾指针r 每次接入新的结点s 随后r s 即r往后移位 详解 头插法 先初始化链表l l linklist malloc siz
  • SOCKS5代理是什么?

    嘿 今天我们来聊一下SOCKS5代理 你听说过吗 如果你对网络安全 隐私保护或者访问限制有一点点兴趣 那么你一定不能错过这个话题 别担心 我会以轻松有趣的方式给你解释清楚 让你对SOCKS5代理有个全面的了解 首先 我们先来搞明白什么是代理
  • js逆向--百度滑块验证码

    声明 本文章中所有内容仅供学习交流 不可用于任何商业用途和非法用途 否则后果自负 如有侵权 请联系作者立即删除 由于本人水平有限 如有理解或者描述不准确的地方 还望各位大佬指教 在工作中遇到了百度的滑块 翻了下csdn以及公众号发现没人写
  • vue2.0 自定义指令 + 案例:v-lazy-loading、v-drag、v-resize、v-copy

    文章目录 1 自定义指令 文档说明 1 1 全局注册 局部注册 1 2 钩子函数 2 案例一 property 的自定义钩子样例 3 案例二 动态指令参数 4 案例三 element ui 自定义el select的下拉懒加载指令v laz

随机推荐

  • C函数调用机制及栈帧指针

    转载 http bbs csdn net topics 90317145 http blog chinaunix net uid 26817832 id 3347227 html 帧指针 和栈指针到底是什么 有什么联系吗 帧指针指向帧头 栈
  • NCRE——网络工程师——网络技术

    对计算机发展具有重要影响的广域网 ARPANET 第一个运营的封包交换网络 IP电话系统有4个原件 网关 终端 网守 多点控制单元 通过MCU实现多点通信 网关可以看作H 323设备 IP电话中 网关的功能包括 A 号码查询 B 信号调制
  • 时序预测

    时序预测 MATLAB实现BP神经网络未来多步预测 目录 时序预测 MATLAB实现BP神经网络未来多步预测 预测效果 基本介绍 模型描述 程序设计 参考资料 致谢 预测效果 基本介绍 本次MATLAB实现BP神经网络时间序列未来多步预测
  • cmake生成动态链接库

    使用CMake生成动态链接库的步骤如下 1 在CMakeLists txt文件中指定要编译的源文件 例如使用add library命令 2 使用CMake生成Makefile文件 3 在终端中进入到CMake生成的Makefile文件所在的
  • 二、nginx server基础配置[root、alias、index]

    一 root 解释 root与alias类似 root其寻找文件是root地址 location 如下例子会去 var www html work下面寻找文件 如http localhost 80 work ab html其会寻找 var
  • STM32学习笔记:adc采样得到的电压值用485发送给pc

    采用adc1的通道10 将采集到的电压值用485发送给PC显示 先上原理图 源代码见附件 这里想说的是几个要注意的问题 1 ad输入的电压经过了R42和R44进行分压 所以pc显示的电压值将会减半 2 采用这个函数进行发送数据的时候 每次都
  • react中使用markdown组件——react-md-editor

    react中使用markdown组件 组件推荐 react md editor https github com uiwjs react md editor 在项目中使用过后是这样的 左侧内容可以默认 可以手动回填 简单介绍 下载依赖 np
  • 利用python自定义图片大小

    from PIL import Image import os 生成图片 并使用二进制方式打卡 读取图片中的内容 读取图片中的内容 img Image name RGB 1024 1024 255 160 255 img sane pyim
  • word怎么改一张纸的方向_word怎样单独改变一张纸的方向

    现在 您想要实现这样的效果 想设置其中的某一页为横向的 而其它页则统一为纵向的 如何设置呢 方法如下 相当简单 单独设置Word某页为横向 纸张大小 页边距等 均使用如下方法 比如 您的Word文档总的有十页 现在 您要将第二页的纸型方向设
  • servlet的基本使用

    目录 一 servlet的概念 二 servlet的生命周期 三 servlet实现登录的案例 登录界面 实现式开发 继承式开发 servlet的配置 配置式开发 注解式开发 一 servlet的概念 狭义的 Servlet 是指 Java
  • 密码学基础系列之(2.1传统对称密钥密码之三)

    多码代换密码 多码代换中 明文字符与密文字符的关系是一对多 密文C除了与明文P有关外 还与P的位置有关 自动密钥密码 autokey cipher P P1P2P3 C C1C2C3 k k1 P1 P2 加密 Ci Pi ki mod N
  • c语言 adt实验报告,Android实验报告

    Android实验报告 由会员分享 可在线阅读 更多相关 Android实验报告 90页珍藏版 请在人人文库网上搜索 1 Android 实验报告 专业 计算机科学与技术 班级 13419011 学号 1341901124 姓名 武易 精品
  • 已经上架的app(可供销售)在AppStore上搜不到的解决办法

    能搜索到但是是旧版本的情况 把你的app价格调为6元RMB 然后地区只选择中国 保存 这样你的app状态就会变成pending contract 然后把你的app调整成免费 地区全选 保存 再等半小时左右 AppStore就可以搜到了 亲测
  • 【机器学习项目实战】Python基于协同过滤算法进行电子商务网站用户行为分析及服务智能推荐

    说明 这是一个机器学习实战项目 附带数据 代码 文档 代码讲解 如需数据 代码 文档 代码讲解可以直接到文章最后获取 1 项目背景 电子商务网站数量迅速上升 将电子商务网站浏览者变为实际消费者 满足消费者需求 通过不同形式提升消费者忠诚度是
  • 兼容性测试方案

    目的 快速覆盖用户的各种操作环境 进行快速验证 1 常规项目测试策略 提高重视度 在需求分析 测试设计 测试执行 收尾阶段都要加大兼容性测试的比重 1 1 需求阶段 在需求阶段要获取兼容性测试环境的来源 来源为产品经理和用户现场使用情况 更
  • java动态规划,求最大子段和,并且求出开始位置,结束位置

    public static void main String args int x 1 3 2 11 8 4 13 5 4 8 5 System out println 最大子段和为 MaxAdd x private static int
  • 基础设计一——FPGA学习笔记<2>

    目录 零 设计流程 一 按键点亮LED灯 1 硬件资源 2 项目设计 3 波形设计 4 创建Vivado工程 编辑 lt 1 gt 添加设计文件 lt 2 gt 添加仿真文件 5 引脚约束 6 生成比特流文件 7 下载验证 8 程序固化 二
  • for-loop 与 json.Unmarshal 性能分析概要

    原文地址 for loop 与 json Unmarshal 性能分析概要 前言 在项目中 常常会遇到循环交换赋值的数据处理场景 尤其是 RPC 数据交互格式要转为 Protobuf 赋值是无法避免的 一般会有如下几种做法 for for
  • Spring入门概述及基本知识点

    Spring是什么 我们常说的Spring 其实在官网中全称是SpringFrameWork Spring是一个轻量级 非入侵式的Java开发框架 主要用于业务层 和整合其他层 解决了业务层和表现层 持久层的耦合问题 将面向接口编程贯穿整个
  • boost介绍

    boost是一个准标准库 相当于STL的延续和扩充 它的设计理念和STL比较接近 都是利用泛型让复用达到最大化 不过对比STL boost更加实用 STL集中在算法部分 而boost包含了不少工具类 可以完成比较具体的工作 boost主要包