02-boost库使用

1. boost库下载

官方地址:https://www.boost.org/,下载当前最新版本1.73.0。我们在VS2019上使用boost,下载boost_1_73_0.zip

2. 安装配置

下载后,解压到某目录,例如:D:\Program Files\boost_1_73_0。
开始菜单,选择Visual Studio 2019 —> x86_x64 Cross Tools Command Prompt for VS 2019,打开命令行,切换到boost库目录:cd /d D:\Program Files\boost_1_73_0

cd /d D:\Program Files\boost_1_73_0
bootstrap.bat # 执行

在这里插入图片描述
执行完后再执行如下命令:

b2 install stage --toolset=msvc-14.1 architecture=x86 address-model=64 link=static --build-type=complete --with-system --with-thread --with-date_time --with-filesystem --with-serialization

注意:

  • MSVC 版本号对应,vs2019 可以支持boost c++ library 针对msvc-14.1的编译选项

等待安装按成。
在这里插入图片描述
最后记录两个路径:Boost库的包含目录和库目录:

# include path
D:\Program Files\boost_1_73_0

# lib path
D:\Program Files\boost_1_73_0\stage\lib

3. VS2019使用boost

新建vs2019 c++项目,并添加boost依赖库,项目——>属性——>选择VC++目录,在包含目录 和 库目录添加以上2个路径,如下图:

在这里插入图片描述
或可以新建一个系统环境变量BOOST_DIR,值为D:\Program Files\boost_1_73_0。

  • 在path系统环境变量中添加:%BOOST_DIR%;

  • VC++包含目录中添加: $(BOOST_DIR);

  • VC++库目录中添加: $(BOOST_DIR)\stage\lib。

代码测试

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

using namespace std;
using namespace boost;

int main()
{
	//system("chcp 65001");

	double a = lexical_cast<double>("3.1415926");
	string str = lexical_cast<string>("3.1415926");
	cout << "This is a number: " << a << endl;
	cout << "This is a string: " << str << endl;
	int b = 0;
	try {
		b = lexical_cast<int>("neo");
	}
	catch (bad_lexical_cast& e) {
		cout << e.what() << endl;
	}
	return 0;
}

运行后输出(正常)如下:
在这里插入图片描述

4. boost分类

4.1 按照功能分类

4.1.1 字符串和文本处理

a) Conversion
b) Format
c) IOStream
d) Lexical Cast
e) Regex
f) Spirit
g) String Algo
h) Tokenizer
i) Wave
j) Xpressive

4.1.2 容器

a) Array
b) Bimap
c) Circular Buffer
d) Disjoint Sets
e) Dynamic Bitset
f) GIL
g) Graph
h) ICL
i) Intrusive
j) Multi-Array
k) Multi-Index
l) Pointer Container
m) Property Map
n) Property Tree
o) Unordered
p) Variant

4.1.3 迭代器

a) GIL
b) Graph
c) Iterators
d) Operators
e) Tokenizer

4.1.4 算法

a) Foreach
b) GIL
c) Graph
d) Min-Max
e) Range
f) String Algo
g) Utility

4.1.5 函数对象和高阶编程

a) Bind
b) Function
c) Functional
d) Functional/Factory
e) Functional/Forward
f) Functional/Hash
g) Lambda
h) Member Function
i) Ref
j) Result Of
k) Signals
l) Signals2
m) Utility

4.1.6 泛型编程

a) Call Traits
b) Concept Check
c) Enable If
d) Function Types
e) GIL
f) In Place Factory, Typed In Place Factory
g) Operators
h) Property Map
i) Static Assert
j) Type Traits

4.1.7 模板元编程

a) Function Types
b) Fusion
c) MPL
d) Proto
e) Static Assert
f) Type Traits

4.1.8 预处理元编程

a) Preprocessors

4.1.9 并发编程

a) Asio
b) Interprocess
c) MPI
d) Thread

4.1.10 数学和数字

a) Accumulators
b) Integer
c) Interval
d) Math
e) Math Common Factor
f) Math Octonion
g) Math Quaternion
h) Math/Special Functions
i) Math/Statistical Distributions
j) Multi-Array
k) Numeric Conversion
l) Operators
m) Random
n) Rational
o) uBLAS

4.1.11 排错和测试

a) Concept Check
b) Static Assert
c) Test

4.1.12 数据结构

a) Any
b) Bitmap
c) Compressed Pair
d) Fusion
e) ICL
f) Multi-Index
g) Pointer Container
h) Property Tree
i) Tuple
j) Uuid
k) Variant

4.1.13 图像处理

a) GIL

4.1.14 输入输出

a) Asio
b) Assign
c) Format
d) IO State Savers
e) IOStreams
f) Program Options
g) Serialization

4.1.15 跨语言混合编程

a) Python

4.1.16 内存管理

a) Pool
b) Smart Ptr
c) Utility

4.1.17 解析

a) Spirit

4.1.8 编程接口

a) Function
b) Parameter

4.1.19 杂项

a) Compressed Pair
b) Conversion
c) CRC
d) Date Time
e) Exception
f) Filesystem
g) Flyweight
h) Lexical Cast
i) Meta State Machine
j) Numeric Conversion
k) Optional
l) Polygon
m) Program Options
n) Scope Exit
o) Statechart
p) Swap
q) System
r) Timer
s) Tribool
t) Typeof
u) Units
v) Utility
w) Value Initialized

4.1.20 编译器问题的变通方案

a) Compatibility
b) Config

4.2 常用库

  • Regex:正则表达式库
  • Spirit:LL parser framework,用C++代码直接表达EBNF
  • Graph:图组件和算法
  • Lambda:在调用的地方定义短小匿名的函数对象,很实用的functional功能
  • concept check:检查泛型编程中的concept
  • Mpl:用模板实现的元编程框架
  • Thread:可移植的C++多线程库
  • Python:把C++类和函数映射到Python之中
  • Pool:内存池管理
  • smart_ptr:5个智能指针
<think>好的,我现在需要帮助用户了解如何使用Boost.Format。首先,用户提到了他们想了解或使用Boost.Format,所以我要先总结这个的基本信息和用法。 根据用户提供的引用内容,Boost.Format是一个类型安全且可扩展的,类似于C的printf,但更安全,同时保持了C++的输出流优势。引用[4]提到它用于替代sprintf,解决安全性和直观性问题。我需要先介绍它的基本用法,比如如何包含头文件,创建format对象,以及使用%操作符进行格式化。 接下来,用户可能需要具体的示例来理解如何应用。例如,如何格式化不同类型的变量,如整数、浮点数和字符串。引用[2]和引用[3]提到Boost.Format支持多种类型,只要重载了operator<<就可以使用。所以应该提供一些基本示例,比如格式化多个变量,调整宽度和精度,还有位置参数的用法。 然后,用户可能关心更高级的功能,比如处理多个参数或格式化选项。我需要解释如何使用占位符,比如%1%和%2%来指定参数的位置,这样用户可以在不同位置重复使用参数。此外,可能需要提到如何在格式字符串中设置宽度、对齐和填充字符,比如%|10d|来设置宽度为10,右对齐。 还需要注意错误处理或常见问题,比如格式字符串中的占位符数量与实际参数是否匹配,否则会抛出异常。这点在引用[4]中有提到,强调其安全性,因此需要提醒用户避免这类错误。 最后,用户可能需要了解如何获取格式化后的字符串,即通过str()方法,或者直接输出到流中。例如,可以展示如何将format对象传递给输出流,或者转换为std::string。 在生成相关问题的时候,要考虑用户可能的后续疑问,比如性能如何,与sprintf或stringstream的比较,或者如何处理特殊格式需求。例如,用户可能想知道如何控制浮点数的小数位数,或者如何左对齐文本。 整理这些思路后,我需要确保回答结构清晰,分步骤讲解,并包含代码示例。同时,引用相关的引用内容来支持说明,比如Boost.Format的类型安全和扩展性来自引用[1],基本语法和头文件包含来自引用[2]和[4]。 现在需要检查是否有遗漏的部分,比如是否需要提到多线程安全性,但根据提供的引用内容,并没有相关信息,所以可能不需要涉及。另外,确保代码示例正确,比如使用正确的操作符%来添加参数,并展示不同的格式化选项。 可能还需要强调Boost.Format的优势,比如类型安全,避免缓冲区溢出,这在引用[4]中被提到作为sprintf的替代。同时,对比stringstream,Boost.Format更直观,类似于printf的格式,容易上手。 最后,生成的相关问题应围绕用户可能深入的方向,如安装配置、高级功能、性能比较等。这样用户可以根据自己的需求进一步探索。</think>### 如何使用 Boost.Format Boost.Format 是 C++ 中一个类型安全且灵活的格式化,结合了 `printf` 的直观语法和 C++ 流的安全性。以下是使用步骤和示例: --- #### 1. **安装与头文件包含** -安装 Boost ,并在代码中包含头文件: ```cpp #include <boost/format.hpp> using namespace boost; // 可选,简化代码 ``` --- #### 2. **基础用法** - 通过 `%` 操作符逐个添加参数,生成格式化字符串: ```cpp // 示例:格式化整数、浮点数和字符串 std::string result = str(format("ID: %d, 姓名: %s, 分数: %.2f") % 1001 % "张三" % 95.5); // 输出: "ID: 1001, 姓名: 张三, 分数: 95.50" ``` [^4] --- #### 3. **高级功能** - **位置参数**:使用 `%1%`、`%2%` 指定参数位置,支持重复使用: ```cpp str(format("%1% 的平方是 %2%,立方是 %2%") % 5 % (5*5) % (5*5*5)); // 输出: "5 的平方是 25,立方是 125" ``` - **格式控制**:支持宽度、对齐和填充字符: ```cpp str(format("|%10d| |%-10s|") % 123 % "左对齐"); // 输出: "| 123| |左对齐 |" ``` [^2] --- #### 4. **类型安全与扩展性** - **支持自定义类型**:只要重载了 `operator<<` 的类型均可使用: ```cpp struct Point { int x, y; }; std::ostream& operator<<(std::ostream& os, const Point& p) { return os << "(" << p.x << "," << p.y << ")"; } Point p{3, 4}; str(format("坐标: %s") % p); // 输出: "坐标: (3,4)" ``` [^1] --- #### 5. **错误处理** - 若占位符与参数数量不匹配,会抛出异常: ```cpp try { str(format("%d %d") % 1); // 错误:缺少第二个参数 } catch (const format_error& e) { std::cerr << "错误: " << e.what(); } ``` --- #### 6. **输出方式** - 直接输出到流或转换为字符串: ```cpp std::cout << format("时间: %02d:%02d") % 9 % 5; // 输出: "时间: 09:05" std::string s = format("%s-%04d") % "file" % 42; // s = "file-0042" ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥俊子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值