Boost库简介
- Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,由Boost社区组织开发、维护;
- 内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,可以与C++标准库完美共同工作,并且为其提供扩展功能;
- C++标准库内容可能是来自boost库,boost库成为具有实践意义的准标准库;
- 大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库;
安装与编译
boost下载
1、 在boost官网下载boost压缩文件
2、解压
boost:源码目录,大部分程序库源码都在这里
doc:HTMI 格式的文档 ,也可以生成 PDF 格式的文档
libs:所有组件的示例,测试、编译代码和说明文档
more:库作者的相关文档
status:可用于测试 Boost 库的各个组件
tools:用于编译boost的工具的源代码等
boostrap.bat/boostrap.sh:编译工具
注意
- Boost库把C++类的声明和实现放在了一个文件中,而不是分成两个文件.h和.cpp,故文件的后缀是.hpp;
- 包含头文件的时候需要有boost目录,即#include “boost/logic/tribool.hpp”,而不是#include “logic/tribool.hpp”;
编译
windows环境
-
windows下执行boostrap.bat,会生成b2.exe及project-config.jam文件;
-
然后执行b2.exe会在stage\lib下生成x64、x86平台的release及debug版本的静态库(编译动态库需要添加参数:b2.exe link=shared),其中带gd的是debug版本,不带gd的是release版本;
-
linux 环境
1、执行 ./boostrap.sh 进行boost配置,生成b2;
2、进行编译
简单编译: 执行 sudo ./b2 install
完全编译: 执行 sudo ./b2 --buildtype=completed install
开发环境配置与实例
- 开发工具 visual studio 2013
头文件包含
- 使用绝对路径
#include "D:/Downloads/boost_1_80_0/boost/algorithm/string.hpp"
- 使用相对路径(推荐),在项目属性中添加附加包含目录,然后代码里添加
#include "boost/algorithm/string.hpp"
字符串实例
// boost string库引用
#include <iostream>
#include "boost/algorithm/string.hpp"
int main()
{
// 字符串大小写转换
std::string str = "abc";
boost::to_upper(str); // 改变了原字符串
std::cout << "str=" << str << std::endl;
std::string strCpy = boost::to_lower_copy(str); // 不改变了原字符串
std::cout << "str=" << str << ", strCpy=" << strCpy << std::endl;
getchar();
return 0;
}
链接静态库
- 由于添加的头文件是接口声明文件,具体实现的cpp代码可能被编译成了lib文件,这时需要把lib引用到项目中;
- 代码中引用,但这样可能会有问题,因为这个lib可能引用了其他lib,也需要引用进来;
#pragma comment(lib, "D:/Downloads/boost_1_80_0/stage/lib/libboost_date_time-vc142-mt-gd-x32-1_80.lib")
- 项目属性中添加库路径以及库名称(推荐)
时间实例
// date_time库引用
#include <iostream>
#include "boost/date_time/gregorian/gregorian.hpp"
int main()
{
boost::gregorian::date today = boost::gregorian::day_clock::local_day();
std::cout << "今天是" << today.year() << "年" << std::endl;
std::cout << today.month().as_number() << "月" << std::endl;
std::cout << today.day() << "日" << std::endl;
std::cout << "星期" << today.day_of_week() << std::endl;
std::cout << "一年中的第几周: " << today.week_number() << std::endl;
std::cout << "一年中的第多少天: " << today.day_of_year() << std::endl;
getchar();
return 0;
}
链接动态库
- 将.dll文件放到exe所在的目录即可
知识总结,交流学习,不当之处敬请指正,谢谢!