C++ boost库开发教程
文章平均质量分 77
boost零基础教程,先介绍windows环境boost库的下载,编译,VS2017开发环境配置等,然后介绍各种容器数组,多线程,xml文件解析、asio、websocket等技术,纯干货,提供全部源码。
优惠券已抵扣
余额抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
令狐掌门
C++程序员,出版过《C++零基础入门视频教程》、《Qt高级进阶视频教程》、《OBS源码分析与桌面录制视频教程》、《PyQt PySide6零基础入门与项目实战》。
展开
-
C++ boost库教程(一):boost简介
C++ boost零基础教程原创 2019-05-03 20:43:31 · 50341 阅读 · 0 评论 -
C++ boost库开发环境配置
最近有小伙伴看了我的教程,被C++ boost开发环境的配置难住了,我在写博客时觉得C++程序员应该对SDK的配置很熟悉,就没着重介绍,本篇详细介绍VS2017 C++ boost开发环境的配置,其它库的配置也类似。 像boost, ffmpeg, opencv, SDL, halcon等,这些SDK, 一般都是包含以下三种文件(1)头文件 .h或.hpp, 用hpp做后缀的,是把声明和实现放一起了;(2)静态库 .lib文件;(3)动态库.dll文件,该类文...原创 2020-07-05 22:30:16 · 2029 阅读 · 4 评论 -
C++ boost库教程(二):boost数值转换
在STL中有一些列的字符转换函数,例如atoi(), itoa()等,在boost里面只需用一个函数lexical_cast进行转换,lexical_cast是模板方法,使用时需要传入类型。 使用方法: (1)包含头文件 #include <boost/lexical_cast.hpp> (2)命名空间 u...原创 2019-05-04 14:47:07 · 2676 阅读 · 1 评论 -
C++ boost库教程(三):boost字符串处理
boost库也提供了和STL一样的字符串处理方法,不过比STL更加丰富,使用boost的字符串处理方法,需要包含头文件: #include <boost/algorithm/string.hpp> using namespace boost;boost库有很多以“i”开头,"_copy"结尾的函数方法,简述如下: (1...原创 2019-05-05 10:59:18 · 3690 阅读 · 0 评论 -
C++ boost库教程(四):windows下编译boost库
前面介绍的一些boost库功能,都是boost的基础功能,boost还有很多功能需要编译后才能使用。例如Chrono, Context, FileSystem, Regex(正则表达式),Thread等。编译boost库很简单,步骤如下:(1)在cmd窗口下,cd到boost的目录,例如的目录如下:(2)执行批处理脚本 bootstrap.bat, 完成后会在当前目...原创 2019-05-05 22:09:28 · 1924 阅读 · 1 评论 -
boost ubuntu编译指南
boost下载与解压boost库版本页面https://www.boost.org/users/download/当前的版本是1.75.0,下载链接https://dl.bintray.com/boostorg/release/1.75.0/source/boost_1_75_0.tar.gz本篇教程用deepin系统演示,在ubuntu下类似,命令完全一样。先在桌面创建一个文件夹,例如boost_code, 进入boost_code, 用wget命令下载,如下图wget https://dl原创 2021-04-17 01:02:47 · 497 阅读 · 0 评论 -
ubuntu boost运行./bootstrap.sh后出现Failed to build B2 build engine
ubuntu boost运行./bootstrap.sh后可能会出现如下提示Building B2 engine…A C++11 capable compiler is required for building the B2 engine.Toolset ‘cxx’ does not appear to support C++11.Note, the C++11 capable compiler is only required for building the B2engine. The B2原创 2021-04-17 00:08:17 · 4243 阅读 · 4 评论 -
C++ cmake脚本链接Boost库
有些C++项目可能需要用到CMake,本篇博客介绍如何在cmake脚本里链接boost库。来打印看看具体的Boost_LIBRARIES是哪些,其实就是上面find_package里写的。然后使用find_package引用当前项目需要用到的boost模块,在最后链接时,需要链接。在上面的脚本中,关于BOOST_ROOT 的路径,可以参考我之前的博库cmake编译方法。如果是动态链接,那么运行的时候就需要把相应的dll放到exe目录,否则会提示缺少dll。, 在cmake生成项目时,可以用。原创 2023-11-29 09:24:06 · 728 阅读 · 0 评论 -
C++ boost库教程(五):boost日期时间类的用法
boost为开发者提供了日期时间相关的类,例如date, date_duration, ptime等,为C++的日期时间编程提供了极大的便利。要是用boost日期时间类,需要编译boost, 具体方法参考上一篇博客【boost的编译方法】。 调用方法:包含头文件, 名字空间,lib库(各个版本的lib名字不同)#include <boost/date_...原创 2019-05-09 13:14:27 · 2010 阅读 · 3 评论 -
C++ boost库教程(六):boost timer类实现程序计时
timer 类 boost的timer类可以计算时间的流逝,可以用来测量程序的运行时间,算法的执行时间等,提供毫秒级别的时间精度,最大的时间间隔是596小时. timer类位于boost命名空间下,需要包含头文件,如下:#include <boost/timer.hpp>using namespace boost;示例代码:例如计算...原创 2019-05-19 01:00:17 · 1282 阅读 · 0 评论 -
C++ boost库教程(七):boost数组array
boost数组arrayboost有自己的数组,性能比普通数组差一点,使用时包含头文件#include<boost/array.hpp> boost::array的部分源码如下 template<class T, std::size_t N> class array { public: T elems[N]; ...原创 2019-05-19 01:02:07 · 2415 阅读 · 0 评论 -
C++ boost库教程(八):散列容器,双向映射容器,环形缓冲区
boost散列容器 散列容器(hash container)是一种非常重要的容器类型,它内部使用hash算列表代替二叉树提供跟高的访问效率,散列容器是无序的。 boost提供的set,map与STL的set/map用法基本相同,单查找的平均复杂度友O(logN)变成了O(1),查找性能更好。unordered_set unordered_set...原创 2019-05-19 23:11:39 · 1294 阅读 · 1 评论 -
C++ boost库教程(九):boost for循环
boost for循环提供了两个宏: 正向迭代 BOOST_FOREACH, 逆向迭代 BOOST_REVERSE_FOREACH使用时需要包含头文件 #include <boost/foreach.hpp>基本操作和C++ 11的 for类似,...原创 2019-05-25 19:41:13 · 1456 阅读 · 0 评论 -
C++ boost库教程(十):boost 多维动态数组multi_array
C++在创建数组时必须制定除第一维外的维数,例如 :arr[m][n]; /*表示m行n列,如果不指定第二个参数,就无法指定列数,例如arr[3][a] = {1,2,3,4,5,6,7}那么该二维数组的排列方式有多种,如果指定第二列 arr[][3], 那么只有一种排列结果:1 2 34 5 67*/ 例如在VS中创建二维数组:...原创 2019-05-25 21:11:23 · 1853 阅读 · 0 评论 -
C++ boost库教程(十一):boost库读写ini
假设有如下配置文件 Net.ini[netinfo]ip=192.168.1.2port=1234boost库提供了读写ini的方法,namespace ini_parser{ template<class Ptree> void read_ini(std::basic_istream<typename Ptree::key_type::v...原创 2020-01-06 21:10:41 · 1670 阅读 · 0 评论 -
C++ boost库教程(十二):boost解析xml文件
xml文件,作为应用程序的配置文件很常见,功能也比ini文件丰富,对于xml文件的读写,有很多方法,之前我主要使用libxml, tinyxml这两个库,操作方法稍微有点复杂,对比使用boost的xml操作,boost相对简单。 boost库的property_tree保存了多个属性值得树形结构,可以解析xml, json, ini等文件。 下面介...原创 2020-01-06 22:00:57 · 2327 阅读 · 0 评论 -
C++ boost库教程(十三):boost解析json数据
什么是json格式 json是JavaScript Object Notation的简写,一种轻量级数据交换格式,经常用于web项目,前后台数据交换,数据格式比较简单,格式是压缩的,占用带宽小 ,便于服务器解析。JSON 语法规则 (1)数据在名称值对中 (2)数据由逗号分隔 (3)花括号保存对象 (4)方括号保存数组...原创 2020-01-07 23:06:45 · 3689 阅读 · 0 评论 -
C++ boost库教程(十四):boost多线程
关于多线程,各个系统,框架都有自己的实现,例如 windows: CreateThread MFC: AfxBeginThread Qt : QThread boost库是跨平台的,如果使用boost的多线程,在不同平台之间就无需修改代码,这一点还是看各人的喜好,有些人不一定喜欢用boost...原创 2020-01-07 23:34:24 · 1837 阅读 · 0 评论 -
C++ boost库教程(十五):boost线程同步之mutex
卖火车票应该是最经典的多线程demo, 多窗口,票不重复,不能出现负数票,本篇博客用卖火车票来模拟多线程同步。 互斥量(mutex)是一种用于线程同步的手段,它可以在多线程环境里防止多个线程同时操作共享资源.一旦一个线程锁住了互斥量,那么其他钱程必须等待它解锁互斥量后才能再访问共享资源. Qt有QMutex, MFC有CMutex, BOOST库也有自己的mutex,...原创 2020-01-12 19:18:38 · 1870 阅读 · 0 评论 -
C++ boost库教程(十六):boost线程timed_mutex
上篇博客介绍了boost库的mutex, 这次介绍timed_mutex的使用。 timed_mutex比mutex多增加了两个功能,尝试加锁,持续加锁。try_lock_for 如果timed_mutex为上锁,则将它上锁,并返回1,如果已经上锁,则阻塞rel_time时间,并返回0. 代码如下:#include "pch.h"#inclu...原创 2020-01-12 20:13:30 · 1021 阅读 · 0 评论 -
C++ boost库教程(十七):boost并发编程之原子操作atomic
早期的C++中没有语言级别的并发支持,因为在C++诞生很久以后线程等用于并发操作的概念才出现(POSIX线程标准制定于1995年)。随着近年来多CPU、多内核计算机的大量出现,并发操作(不仅是多线程)已经成为了软件开发的基本需求,新的C++标准提供了〈atomic〉、〈thread〉等库,对并发编程提供了初步的支持,但仍未达到尽善尽美。 作为C++标准库的补充,Boo...原创 2020-01-14 01:07:55 · 1531 阅读 · 0 评论 -
C++ boost库教程(十八):boost log模块应用与分析
boost的日志库需要编译,如果经过第四篇的编译过程后,在lib目录会有如下库 boost的功能强大,包罗万象,有自己的log,可以不用第三方库,当然C++的第三方log库也很强大,例如衍生自java log4j的log4cxx、log4cpp、 log4cplus,谷歌google glog等,作为软件开发人员,熟练掌握一个log库很有必要,log对软件的调试运行分析很...原创 2020-01-19 23:25:20 · 1799 阅读 · 0 评论 -
C++ boost库智能指针(一):scoped_ptr 与 scoped_array
使用scoped_ptr需要包含的头文件#include <boost/scoped_ptr.hpp> 相比于auto_ptr, boost的scoped_ptr对指针的使用权进行转移,这是因为在scoped_ptr内部对拷贝,赋值做了私有化:template<class T> class scoped_ptr // noncopyable{private: T * px; scoped_ptr(scoped_ptr const &..原创 2020-06-22 23:18:19 · 627 阅读 · 0 评论 -
C++ boost库智能指针(二):shared_ptr和shared_array
shared_ptr是boost最重要的智能指针,最像智能指针的"智能指针",由于它的优越表现,被加入了C++11标准。 shared_ptr与scoped_ptr —样包装了 new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针,可以被自由地拷贝和赋值,在任意的地方共享它,和scoped_ptr、auto_ptr一样重载了“*”和“->”,用get()可以获取被管理的指针,也没有算术操作符,同样也不能管理数组内存,当没有代码使用(引用计数为0)它时...原创 2020-06-22 23:18:36 · 979 阅读 · 0 评论 -
C++ boost库智能指针(三):weak_ptr
weak_ptr是shared_ptr得到协助者,可以观察shared_ptr是否过期,weak_ptr不改变引用计数,也不能使用 *,->操作符,是一个很弱的智能指针。例如下面的代码:#include <iostream>#include <boost/make_shared.hpp>#include <boost/weak_ptr.hpp>using namespace std;using namespace boost;cl...原创 2020-06-22 23:19:07 · 366 阅读 · 0 评论 -
C++ boost库智能指针(四):intrusive_ptr
intrusive_ptr这个智能指针不怎么好用,虽然它和shared_ptr也是基于引用计数的,但需要自己来实现引用计数的增加与减少。需要在我们管理的指针对象中添加一个计数的成员,例如下面的类Test. 头文件:#include <boost/intrusive_ptr.hpp>class Test{public: Test() { _iCount = 0; cout << "构造" << endl; } ~Test...原创 2020-06-23 00:08:37 · 1198 阅读 · 0 评论 -
c++ boost enable_shared_from_this原理分析与代码演示
enable_shared_from_this介绍 在使用boost库时,经常会遇到enable_shared_from_this,这个类有什么用呢,在c++ std里,也有这个类,先来看看std中关于enable_shared_from_this的解释: 派生自的对象enable_shared_from_this可以使用shared_from_this成员函数中的方法来创建与现有所有者共享所有权的实例的shared_ptr所有者。否则,如果使用this创建新的shared_ptr,则它与现有sha原创 2021-10-30 17:30:28 · 354 阅读 · 0 评论 -
C++ boost库教程之内存池
Boost Pool 库提供了一个内存池分配器,它是一个工具,用于管理在一个独立的、大的分配空间里的动 态内存。当你需要分配和回收许多不的对象或需要更高效的内存控制时,使用内存池是一个好的 解决方案。 Boost库的pool主要适用于快速分配同样大小的内存块,尤其是反复分配和释放同样大小的内存块的情况。使用pool内存池主要有以下两个优点: (1) 能够有效地管理许多小型对象的分配和释放工作,避免了自己去管理内存而产生的内存碎片和效率低下问题。 (2)告别...原创 2020-12-07 23:53:00 · 985 阅读 · 0 评论 -
C++ boost ref 引用类型介绍
boost库提供了一种“强引用”类型,标准C++的引用类型,一旦指向类型,就不能改变它的值,boost的ref类型可以进行修改值,++等操作。 boost引用库是在ref.cpp文件的reference_wrapper内,使用前要包含图文件 #include<boost/ref.hpp> reference_wrapper很小,它是一个模板类,代码不多...原创 2020-07-06 23:28:04 · 1002 阅读 · 0 评论 -
c++ websocketpp简介与开发环境配置
websocket简介websocket是HTML5中新增的一个协议,这个协议的出现,让客户端和服务器之前的数据交互变成全双工的。websocket的出现,最主要的变化是允许服务器主动给客户端推送数据。这一大改变,就让websocket具有了以往其它协议无法比拟的实时通信能力。要实现websocket服务,需要客户端和服务端都得支持websocket协议才可以。目前看来,并没有太多标准性的框架来完成websocket服务。websocket能做什么聊天、多玩家游戏等C++ websocket的实现原创 2021-08-03 23:18:37 · 1197 阅读 · 2 评论 -
socket.io技术介绍与入门
什么是socket.ioSocket.io是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5官网:https://socket.io/官方文档:https://socket.io/docs/v4socket.io特点实时分析:将数据推送到客户端,这些客原创 2021-08-22 18:44:06 · 2152 阅读 · 1 评论 -
boost::asio教程(一) :tcp server与tcp client
boost::asio是boost库的一个名字空间,包含了tcp,udp编程的一些类与方法,比如 如果你是第一次看这个,可能不太懂,不要紧,就把它当做是一些类就可以,什么socket,tcp,udp不用管。 在写网络编程,相信大部分人都了结七层网络协议,tcp三次握手四次挥手之类的,但是其中深层次的原理,却是晦涩难懂,但这并不影响我们写socket之类的代码,boost::asio则更加简化了网络编程的难度,例如写tcp时,你都不知道他是怎么监听端口的。 首先我们来看看常规的C++ tcp原创 2021-10-24 14:56:08 · 2329 阅读 · 0 评论 -
boost::asio教程(二) :异步tcp
如何理解同步,异步呢?用400米接力赛来说,前一个队员到达时,下一个队员才能继续往前跑,这种跑步方式可以理解为同步,一步步的进行;而百米赛跑,8个赛道,所有人同时跑,这种类似于异步。异步不需要等待,同步会阻塞主线程。 本专栏上一篇介绍了boost tcp server与client的实现方式,本篇介绍boost asio异步tcp的实现。先回忆boost::asio同步的实现方式 在学习boost::asio异步tcp之前,先看看上一篇关于同步tcp server与client的实现方式。a原创 2021-10-30 19:02:58 · 1104 阅读 · 0 评论 -
boost::asio教程(三) :boost udp编程
boost::asio教程(一) :tcp server与tcp client boost::asio教程(二) :异步tcp 前面两篇主要讲了boost asio tcp编程,这一节来介绍boost udp编程,先来看看udp用到的类和方法.ip::udp::socket 与tcp类似,在tcp时用到的socket是ip::tcp::socket,boost封装了底层socket的一些操作,用面向对象的方式进行编程。ip::udp::endpoint 在tcp时用到的是ip::tc原创 2021-11-03 22:28:59 · 2712 阅读 · 0 评论 -
C++ boost协程技术介绍
协程在C++20中已经加入了,但并不完善,C++标准库的协程将在C++23中正式推出。其它语言,例如go、python也是默认支持协程,C++相对来说落后了。 Boost在1.53版本就推出了协程库,本篇博客基于Boost1.76版本,来介绍协程库。1.53版本的BoostCoroutine 现在已被弃用,请使用Boost.Coroutine2。什么是协程 在谈协程之前,我们先谈谈函数,函数有入口地址,而且只有一个,返回也只有一个,而协程却可以多次进入,多次返回。 协程,英文名是称为Cor原创 2021-11-06 18:58:31 · 1286 阅读 · 0 评论 -
C++ boost非对称协程代码演示
boost的两种非对称协程:asymmetric_coroutine<>::push_typeasymmetric_coroutine<>::pull_type*pull_typeasymmetric_coroutine<>::pull_type从另一个执行上下文传输数据。模板参数定义了传输的参数类型。asymmetric_coroutine<>::pull_type的构造函数接受一个 函数 ( coroutine-function )作为参数接受翻译 2021-11-06 19:01:24 · 381 阅读 · 0 评论 -
C++ boost对称协程介绍与代码演示
boost提供的对称协程symmetric_coroutine<>::call_typesymmetric_coroutine<>::yield_type与调用者和被调用者之间的关系是固定的非对称协程相反,对称协程能够将执行控制转移到任何其他(对称)协程。例如,对称协程不需要返回到它的直接调用者。symmetry_coroutine<>::call_typesymmetry_coroutine<>::call_type启动一个对称协程并将其参数传递给翻译 2021-11-06 19:14:17 · 672 阅读 · 0 评论 -
C++ boost coroutines2 非对称协程
boost coroutines2提供的非对称协程coroutine<>::push_typecoroutine<>::pull_typecoroutine<>::pull_typecoroutine<>::pull_type从另一个执行上下文(== pull-from)传输数据。模板参数定义了传输的参数类型。coroutine<>::pull_type的构造函数接受一个 函数( coroutine-function)接受对co翻译 2021-11-06 19:30:10 · 300 阅读 · 0 评论 -
C++ Boost库无锁队列、阻塞型队列
在软件编程中,无锁队列是一种特殊类型的数据结构,它允许多个线程在不使用传统互斥锁(如mutexes)的情况下进行并发访问。无锁队列通过使用原子操作来确保线程安全,原子操作是一种不可中断的操作,它可以在单个步骤中完成,无需锁定资源。性能提升:无锁队列通常比使用锁的队列有更好的性能,因为它们避免了锁的开销,包括上下文切换、线程调度延迟和潜在的死锁问题。可扩展性:在多处理器系统中,无锁队列可以更好地扩展。随着处理器数量的增加,使用锁的队列可能会遇到瓶颈,因为多个线程竞争同一个锁。原创 2023-11-28 09:19:21 · 1359 阅读 · 0 评论 -
C++ Boost提供的六种进程间通信技术介绍
内存映射文件(Memory-Mapped Files)是一种进程间通信(IPC)机制,允许文件或设备(通常是磁盘上的文件)的内容被映射到进程的地址空间。这样,文件可以像访问常规内存数组一样被访问,而不是使用传统的文件读写API。这种技术不仅可以用于文件I/O,还经常用于进程间的共享内存。以下是内存映射文件工作原理的概述:文件映射文件打开:首先,需要有一个文件。这个文件可以是已存在的,也可以是新创建的,用于将数据持久存储到磁盘。创建映射:操作系统提供了创建内存映射的API。原创 2023-12-01 20:36:46 · 1230 阅读 · 0 评论