C++:Boost库

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

介绍

Boost是一个功能强大,构造精良,跨越平台,代码开源,完全免费的C++程序库。

共包含160余个库/组件,涵盖字符串与文本处理、容器、迭代器、算法、图像处理、模板元编程、并发编程等多个领域。

由c++标准委员会成员发起倡议并建立boost社区,C++11标准库中三分之二来自boost,并且将来还会有更多的库进入c++标准库,因此boost是一个c++ "准"标准库。

支持现有的所有操作系统。

Boost库的大多数组件不需要编译链接,源码里直接包含头文件。(注意:包含头文件的时候需要有boost目录,即#include "boost/logic/tribool.hpp",而不能是#include "logic/tribool.hpp")剩下的少量库(如chrono,date_time,program_options,test,threa等)必须编译成静态库或动态库,并在构建时指定链接选项才能使用

Boost的独特之处:它把C++类的声明和实现放在了一个文件中,而不是分成两个文件,即.h+.cpp,故文件的后缀是.hpp

功能

含有的功能类有:

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

目录结构

--boost:最重要的目录,90%以上的Boost程序库源码都在这里

--doc:HTMI格式的文档,也可以生成PDF格式的文档

--libs:所有组件的示例、测试、编译代码和说明文档

--more:库作者的相关文档

--status:可用于测试Boost库的各个组件

--tools:用于编译Boost的工具的源代码等

安装Boost

使用源码安装

(1)下载Boost源码
(2)解压放在任意目录,例如/usr/local/boost_1_63_0

./bootstrap.sh
./b2 headers
./b2
./b2 install

安装时间稍长,生成的静态(同态)文件都在/usr/local/lib中,需要cp到/usr/lib中,可以在代码中直接使用;头文件在/usr/local/include中。

使用Homebrew安装

(1)下载安装HomeBrew

brew install boost

(2)留意运行日志会显示头文件目录 /usr/local/Cellar/boost/1.60.0_2/include, lib目录/usr/local/Cellar/boost/1.60.0_2/lib

使用MacPort安装

下载安装MacPort

sudo port install boost

在CLion中使用Boost

(1)新建一个C++项目
(2)在cmakelists中 增加头文件目录

include_directories(/Users/pam/Desktop/pam/boost_1_78_0/)
或者
find_package(Boost 1.70.0 REQUIRED)
if(Boost_FOUND)
    set(Boost_LIBRARY_DIRS D:/ScanSource/download/Boost/vc141_64/lib)
    message(Boost_INCLUDE_DIRS " ${Boost_INCLUDE_DIRS}")
    message(Boost_LIBRARY_DIRS " ${Boost_LIBRARY_DIRS}")
endif()

include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})

(3)替换main.cpp中代码,运行!输入任意数字回车可看到结果。

c++ boost,c++,linux,DPDK,c++,开发语言,kubernetes,c/c++,虚拟机

在XCode项目中使用Boost

(1)新建一个Command Line Tool项目
(2)在Build Setings - Header Search Paths 增加头文件目录
(3)替换main.cpp中代码,运行!输入任意数字回车可看到结果。

#include <iostream>
#include <boost/lambda/lambda.hpp>

int main(int argc, const char * argv[]) {
    
    printf("Please input any number:");
    using namespace boost::lambda;
    typedef std::istream_iterator<int> in;
    
    std::for_each(in(std::cin), in(), std::cout << (_1 * 3) << " " );
    return 0;
}

在XCode项目中使用Boost Lib库

Boost的很多功能都是直接在hpp头文件里实现的,比如上面的lambda例子不用导入任何lib就可以运行了。但也有一部分需要依赖指定lib库才能使用。比如下面这个正则表达式的例子:

#include <iostream>
#include <boost/regex.hpp>

int main(int argc, const char * argv[]) {
    std::string   str = "2013-08-15";
    boost::regex  rex("(?<year>[0-9]{4}).*(?<month>[0-9]{2}).*(?<day>[0-9]{2})");
    boost::smatch res;
    
    std::string::const_iterator begin = str.begin();
    std::string::const_iterator end   = str.end();
    
    if (boost::regex_search(begin, end, res, rex))
    {
        std::cout << "Day:   " << res ["day"] << std::endl
        << "Month: " << res ["month"] << std::endl
        << "Year:  " << res ["year"] << std::endl;
    }
}

使用静态库

在Build Setings - Other linker flags

/usr/local/boost_1_63_0/stage/lib/libboost_regex.a

使用命令行编译相当于

c++ -I /usr/local/boost_1_63_0 main.cpp -o main /usr/local/boost_1_63_0/stage/lib/libboost_regex.a
./main

如果这里直接使用lboost_regex, Xcode默认加载动态库。实际运用中可以考虑将目录中的动态库删除,只保留静态库,并在Build Setings - Library Search Paths 增加lib文件目录。

使用动态库

(1)在Build Setings - Library Search Paths 增加lib文件目录
(2)将lib文件目录中的libboost_regex.dylib文件拖入项目
(3)确保在Build Phases - Link Bindary With Libraries中已经有该库
(4)在Build Phases - Copy Files, 复制libboost_regex.dylib到Products Directory
使用命令行编译相当于

c++ -I /usr/local/boost_1_63_0 main.cpp -o main -L/usr/local/boost_1_63_0/stage/lib/ -lboost_regex
cp /usr/local/boost_1_63_0/stage/lib/libboost_regex.dylib ./
./main

例子:

#include <iostream>
#include <boost/tuple/tuple.hpp>
#include "boost/version.hpp"
using namespace std;

void version()
{
    cout << BOOST_LIB_VERSION << endl;
    cout << BOOST_VERSION << endl;
}
int main()
{
    using namespace std;
    int i;
    char c;
    double d;
    boost::tuples::tie(i,c,d);
    boost::tuples::tie(i,c,d) = boost::tuples::tuple <int,char,double>(1,'A',0.68);
    cout << d <<endl;

    cout<<"BOOST的版本:";
    version();
    return 0;
}

参考

1、Boost(1):Boost库简介及安装
2、Boost库简介
3、Boost编译与使用 - 知乎

4、C++ | boost库入门_烫青菜的博客-CSDN博客

作者:Hang Shao

出处:https://www.cnblogs.com/pam-sh/p/16107753.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,如有问题,可邮件(mir_soh@163.com)咨询.

 文章来源地址https://www.toymoban.com/news/detail-620562.html

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

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

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

相关文章

  • c++ boost circular_buffer

    boost库中的 circular_buffer顾名思义是一个循环缓冲器,其 capcity是固定的当容量满了以后,插入一个元素时,会在容器的开头或结尾处删除一个元素。 circular_buffer为了效率考虑,使用了连续内存块保存元素 使用固定内存,没有隐式或者非期望的内存分配 快速在circular_buffer头或

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

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

    2024年02月15日
    浏览(49)
  • 源自Boost最优雅的C++单例模式

    Boost功能非常强大,在此借鉴一下其线程库中的单例源码,线程安全且优雅。 include/boost/thread/detail/singleton.hpp

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

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

    2024年02月15日
    浏览(44)
  • C++使用boost::serialization进行序列化

    发现一个比较好玩的东西,boost::serialization序列化操作,简单来说感觉像ofstream和ifstream的升级版,Boost.Serialization 库能够将c++项目中的对象转换为一序列的比特(bytes),用来保存和加载还原对象。 在ORBSLAM3保存和加载地图的时候好像就是采用的这种方法,后面需要再深入研究

    2024年02月08日
    浏览(43)
  • 4.4 C++ Boost 数据集序列化库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开

    2024年02月12日
    浏览(36)
  • C++实现websocket服务端客户端(基于boost,亲测可行!)

       整篇文章基本参考了https://blog.csdn.net/jianghuan0122/article/details/123528907,文章记录了如何在现有条件下实现该参考示例(参考示例存在报错,并且参考示例没有介绍环境安装,正确源码附于文末)    自身环境:ubuntu18.04+gcc7.5.0+boost1.7,3   gcc或者g++一般都有,这里主要介绍

    2024年02月11日
    浏览(43)
  • C++实现websocket两server两client半双工通信(基于boost!!!)

       自身环境:ubuntu18.04+gcc7.5.0+boost1.7,3   gcc或者g++一般都有,这里主要介绍一下boost的配置方法   执行如下代码:   装完后发现还是会报错:#include <boost/beast/core.hpp> no such file   这个时候再加一个:   然后编译执行代码就可以了,在这里说明下我不太确定是

    2024年02月12日
    浏览(42)
  • C++实现websocket单server单client全双工通信(基于boost!!!)

       自身环境:ubuntu18.04+gcc7.5.0+boost1.7,3   gcc或者g++一般都有,这里主要介绍一下boost的配置方法   执行如下代码:   装完后发现还是会报错:#include <boost/beast/core.hpp> no such file   这个时候再加一个:   然后编译执行代码就可以了,在这里说明下我不太确定是

    2024年02月11日
    浏览(38)
  • 【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)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包