boost库介绍以及使用

这篇具有很好参考价值的文章主要介绍了boost库介绍以及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++ boost库介绍以及使用

一. 什么是boost库

​ boost 库是一个优秀的,可移植的,开源的 C++ 库,它是由 C++ 标准委员会发起的,其中一些内容已经成为了下一代 C++ 标准库的内容,在 C++ 社区中影响甚大,是一个不折不扣的准标准库,它的功能十分强大,弥补了 C++ 很多功能函数处理上的不足。

​ 学习链接: https://theboostcpplibraries.com/

​ https://www.cnblogs.com/lidabo/p/9294874.html

​ https://tangxing.blog.csdn.net/article/details/116393985

二. 特点

​ 可移植性:Windows,Linux,Unix 等

​ 开源免费:使用 Boost License 来授权使用,商业和非商业都是可以使用的

​ 高效:具有工业强度,设计结构良好,广泛使用

三. 分类

​ boost 库功能强大,按照功能模块分类,大致可以分为如下:

字符串和文本处理库,容器库,迭代器库,算法库,函数对象和高阶编程库,泛型编程,模板元编程,预处理元编程,并发编程,数字和数学,排错和测试,数据结构,图像处理,输入输出,内存管理,跨语言混合编程,解析,编程接口等。

四.boost库安装

一. CentOS环境下搭建boost开发环境

安装boost库

# yum install boost

# yum install boost-devel
二. 下载boost库及编译

​ 要使用 C++ boost 库,先要下载 boost 库,下载地址是:https://www.boost.org/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0hDUehNp-1680489201384)(watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODEwMjc3MQ==,size_16,color_FFFFFF,t_70.png)]

​ 选择 Downloads 下的 Current Release 就可以下载了。下载完成后查看目录,大致如下结构所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1c8tmoH-1680489201385)(watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODEwMjc3MQ==,size_16,color_FFFFFF,t_70-16803409982002.png)]

Boost 压缩包解压后有5万多个文件,占据近 700MB 的磁盘空间,但其目录结构却很简洁清晰:

boost_1_72_0/  #存放配置脚本和说明文件
├──── boost    #最重要的目录,90%以上的Boost程序库源码都在这里
├──── doc      #HTML格式的文档,也可以生成PDF格式的文档
├──── libs     #所有组件的示例、测试、编译代码和说明文档
├──── more     #库作者的相关文档
├──── status   #可用于测试Boost库的各个组件
└──── tools    #b2、quickbook 等自带工具

在大多数情况下,我们只需要关心 boost 子目录,这里面以头文件的形式分门别类地存放了我们要使用的库代码:

boost_1_72_0/  #Boost 安装根目录
├──── boost    #boost子目录
│    ├──── accumulators #累加器库
│    ├──── algorithm    #算法库
│    ├──── align        #内存对齐库
│    ├──── archive      #序列化库
│    ├──── asio         #异步并发库
│    ├──── assign       #赋值初始化库
│    ├──── atomic       #原子操作库
│    ├──── beast        #高级网络通信库(HTTP/WebSocket)
│    ├──── bimap        #双向关联数组
│    ├──── bind         #bind表达式
│    ├──── chrono       #时间处理库
│    ├──── ...          #其他库……
│    └──── yap          #表达式模板库

Boost C++ 库的 1.42.0 版本包含了超过90个库,本书只详细讨论了以下各库:

Boost C++ 库 简要说明
Boost.Any Boost.Any 提供了一个名为 boost::any 的数据类型,可以存放任意的类型。 例如,一个类型为 boost::any 的变量可以先存放一个 int 类型的值,然后替换为一个 std::string 类型的字符串。
Boost.Array Boost.Array 可以把 C++ 数组视同 C++ 标准的容器。
Boost.Asio Boost.Asio 可用于开发异步处理数据的应用,如网络应用。
Boost.Bimap Boost.Bimap 提供了一个名为 boost::bimap 的类,它类似于 std::map. 主要的差别在于 boost::bimap 可以同时从键和值进行搜索。
Boost.Bind Boost.Bind 是一种适配器,可以将函数作为模板参数,即使该函数的签名与模板参数不兼容。
Boost.Conversion Boost.Conversion 提供了三个转型操作符,分别执行向下转型、交叉转型,以及不同数字类型间的值转换。
Boost.DateTime Boost.DateTime 可用于以灵活的格式处理、读入和写出日期及时间值。
Boost.Exception Boost.Exception 可以在抛出的异常中加入额外的数据,以便在 catch 处理中提供更多的信息。 这有助于更容易地调试,以及对异常情况更好地作出反应。
Boost.Filesystem Boost.Filesystem 提供了一个类来处理路径信息,还包含了几个访问文件和目录的函数。
Boost.Format Boost.Format 以一个类型安全且可扩展的 boost::format 类替代了 std::printf() 函数。
Boost.Function Boost.Function 简化了函数指针的定义。
Boost.Interprocess Boost.Interprocess 允许多个应用通过共享内存以快速、高效的方式进行通信。
Boost.Lambda Boost.Lambda 可以定义匿名的函数。 代码被内联地声明和执行,避免了单独的函数调用。
Boost.Multiindex Boost.Multiindex 定义了一些新的容器,它们可以同时支持多个接口,如 std::vectorstd::map 的接口。
Boost.NumericConversion Boost.NumericConversion 提供了一个转型操作符,可以安全地在不同的数字类型间进行值转换,不会生成上溢出或下溢出的条件。
Boost.PointerContainer Boost.PointerContainer 提供了专门为动态分配对象进行优化的容器。
Boost.Ref Boost.Ref 的适配器可以将不可复制对象的引用传给需要复制的函数。
Boost.Regex Boost.Regex 提供了通过正则表达式进行文本搜索的函数。
Boost.Serialization 通过 Boost.Serialization,对象可以被序列化,如保存在文件中,并在以后重新导入。
Boost.Signals Boost.Signal 是一个事件处理的框架,基于所谓的 signal/slot 概念。 函数与信号相关联并在信号被触发时自动被调用。
Boost.SmartPoiners Boost.SmartPoiners 提供了多个智能指针,简化了动态分配对象的管理。
Boost.Spirit Boost.Spirit 可以用类似于 EBNF (扩展巴科斯范式)的语法生成词法分析器。
Boost.StringAlgorithms Boost.StringAlgorithms 提供了多个独立的函数,以方便处理字符串。
Boost.System Boost.System 提供了一个处理系统相关或应用相关错误代码的框架。
Boost.Thread Boost.Thread 可用于开发多线程应用。
Boost.Tokenizer Boost.Tokenizer 可以对一个字符串的各个组件进行迭代。
Boost.Tuple Boost.Tuple 提供了泛化版的 std::pair,可以将任意数量的数据组在一起。
Boost.Unordered Boost.Unordered 扩展了 C++ 标准的容器,增加了boost::unordered_setboost::unordered_map.
Boost.Variant Boost.Variant 可以定义多个数据类型,类似于 union, 将多个数据类型组在一起。 Boost.Variant 比 union 优胜的地方在于它可以使用类。

linux下编译方式:

$ tar -xzf boost_1_81_0.tar.gz
$ cd boost_1_81_0/
#--with-liraries:需要编译的库 --with-toolset:编译时使用的编译器
$ ./bootstrap.sh --with-libraries=all --with-toolset=gcc
# 默认头文件在/usr/local/include,库文件在/usr/local/lib
$ ./b2 install --prefix=/usr  

五. Boost 使用方式

​ Boost 库的大多数组件不需要编译链接,我们在自己的源码里直接包含头文件即可。例如,如果要使用 boost::tribool,只需要在 C++ 源文件中添加如下 include 语句:

//大多数Boost库仅包含头文件(.hpp):它们完全由包含模板和内联函数的头文件组成;链接时不需要单独编译的库二进制文件或特殊处理。
#include <boost/XXX.hpp>
#include <boost/logic/tribool.hpp> //使用tribool库

细心的读者会发现,Boost 库的头文件与我们平常所用的头文件(*.h)或 C++ 标准库的头文件(没有后缀名)不同,这正是 Boost 的独特之处。它把 C++ 类的声明和实现放在了一个文件中,而不是分成两个文件,即.h+.cpp,故文件的后缀是.hpp

之所以这么做当然是有理由的。其中一个原因就是与普通的C头文件(*.h)区分,另一个很重要的原因就是使 Boost 库不需要预先编译,直接将其引入程序员的工程即可编译链接,方便了 Boost 库的使用。
Java、C#、PHP、Python 程序员应该对这种代码文件形式很熟悉,这几种语言都在一个文件中编写所有代码。

剩下的少量库(如 chrono、date_time、program_options、test、thread 等)必须编译成静态库或动态库,并在构建时指定链接选项才能使用。

大多数的 boost 库仅需要包含头文件 hpp 即可,不需要再链接其他的 lib 文件,但是有些 boost 下的库是需要包含 lib 文件的。文章来源地址https://www.toymoban.com/news/detail-843270.html

六. 使用案例

#include <iostream>
#include <boost/version.hpp>  //包含 Boost 头文件
#include <boost/config.hpp>  //包含 Boost 头文件
using namespace std;
int main()
{
    cout << BOOST_VERSION << endl;  //Boost 版本号
    cout << BOOST_LIB_VERSION << endl;  //Boost 版本号
    cout << BOOST_PLATFORM << endl;  //操作系统
    cout << BOOST_COMPILER << endl;  //编译器
    cout << BOOST_STDLIB << endl;  //标准库
    return 0;
}

//g++ -o a.out test.cpp
#include <iostream> 
#include <boost/filesystem.hpp> 
 
using namespace boost::filesystem; 
 
int main(int argc, char *argv[]) 
{ 
 if (argc < 2)
 { 
  std::cout << "用法:app path\n"; 
  return 1; 
 } 
 std::cout << argv[1] << ":" << file_size(argv[1]) << std::endl; 
 return 0; 
} 

// 编译命令:g++ demo2.cpp -o demo2  -lboost_system -lboost_filesystem
#include <boost/thread/thread.hpp>
#include <iostream>
 
using namespace std;
 
void NewThread()
{
        cout << "New thread is running..." << endl;
}
 
int main(int argc, char* argv[])
{
        boost::thread newthread(&NewThread);
        newthread.join();
        return 0;
}

// g++ main.cpp -o test -lboost_system -lboost_thread

到了这里,关于boost库介绍以及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BUCK BOOST以及Charge Pump电路原理

    下文为个人总结三种常见的开关电源,如有疑问欢迎评论区讨论 当开关管Q1驱动为高电平时,开关管导通,储能电感L1被充磁,流经电感的电流线性增加,同时给电容C1充电,给负载R1提供能量 当开关管Q1驱动为低电平时,开关管关断,储能电感L1通过续流二极管放电,电感电

    2023年04月10日
    浏览(39)
  • 【C++ Boost】一个最基本的异步boost async tcp 服务/客户端代码的深刻解析,一文解决所有接口的用法以及一些容易出错的点

    1.官网链接 https://www.boost.org/doc/libs/1_80_0/doc/html/boost_asio.html 本文代码是以官方实例代码做的一些优化 2.平台选择      Boost 最令人惊艳的地方有两个:一是支持跨平台,即windows和linux下的接口代码都是一样的;二是支持异步操作,即可以让read和write操作不阻塞。      因此

    2024年02月06日
    浏览(59)
  • linux下boost编译arm版本

    1.下载 https://www.boost.org/users/history/version_1_74_0.html 2.解压 2.编译 3 替换gcc 修改配置文件project-config.jam,将下列的arm gcc编译器替换为你本机的编译器,比如我是用S32G的编译器 编译 ./b2 5.安装

    2024年01月23日
    浏览(40)
  • [C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...

    Boost 库是 C++ 中一个非常重要的开源库. 它实现了许多 C++ 标准库中没有涉及的特性和功能, 一度成为了 C++ 标准库的拓展库. C++ 新标准的内容, 很大一部分脱胎于 Boost 库中. Boost 库的高质量代码 以及 提供了更多实用方便的 C++ 组件, 使得 Boost 库在 C++ 开发中会被高频使用 为方便

    2024年02月14日
    浏览(44)
  • 【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建

    🌈欢迎来到C++项目专栏 🙋🏾‍♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生 🌏IP坐标:湖北武汉 🍉 目前技术栈:C/C++、Linux系统编程、计算机网络、数据结构、Mysql、Python 🍇 博客介绍:通过分享学习过程,加深知识点的掌握,也希望通过平台能

    2024年03月23日
    浏览(42)
  • 生产环境使用boost::fiber

    boost::fiber是一类用户级线程,也就是纤程。其提供的例子与实际生产环境相距较远,本文将对其进行一定的改造,将其能够投入到生产环境。 同时由于纤程是具有传染性的,使用纤程的代码里也全部要用纤程封装,本文将对一些组件进行简单封装。 boost::fiber支持设置pthread和

    2024年02月07日
    浏览(32)
  • 【C++】开源:Boost库常用组件配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍Boost库常用组件配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/boostorg/boost Boost库在线书籍

    2024年02月15日
    浏览(48)
  • Flutter iOS 集成使用 flutter boost

    在 Flutter项目中集成完 flutter boost,并且已经使用了 flutter boost进行了路由管理,这时如果需要和iOS混合开发,这时就要到 原生端进行集成。 注意:之前建的项目必须是 Flutter module 项目,并且原生项目和flutter module项目在同一个文件夹下面 下面是原生端集成 flutter boost的步骤

    2024年02月13日
    浏览(33)
  • Flutter iOS 集成使用 fluter boost

    在 Flutter项目中集成完 flutter boost,并且已经使用了 flutter boost进行了路由管理,这时如果需要和iOS混合开发,这时就要到 原生端进行集成。 注意:之前建的项目必须是 Flutter module 项目,并且原生项目和flutter module项目在同一个文件夹下面 下面是原生端集成 flutter boost的步骤

    2024年02月14日
    浏览(40)
  • 【C++】开源:Boost网络库Asio配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍Asio网络库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/boostorg/asio Boost.Asio 是一个用于

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包