boost库的安装和使用

1.  介绍

boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。

不过对比STL,boost更加实用。STL集中在算法部分,而boost包含了不少工具类,可以完成比较具体的工作。

boost主要包含一下几个大类:字符串及文本处理、容器、迭代子(Iterator)、算法、函数对象和高阶编程、泛型编程、

模板元编程、预处理元编程、并发编程、数学相关、纠错和测试、数据结构、输入/输出、跨语言支持、内存相关、语法分析、杂项。

 有一些库是跨类别包含的,就是既属于这个类别又属于那个类别。


2、安装

1)编译boost库

第一步:下载boost库,下载地址http://sourceforge.net/projects/boost/files/boost/1.55.0/

注意版本要与vs版本兼容,我的vs版本是2010。

第二部:解压boost库,例如解压到F: \boost_1_55_0

第三部:开始->程序->MicrosoftVisual Studio 2010->Visual Studio Tools->VisualStudio 命令提示(2010),打开一个控制台

第四部:cd F:\boost_1_55_0

注意要切换至该目录,建议用dir鉴别一下当前目录,必要时要单独用f:切换一下。

第五部:bootstrap.bat

第六步:bjam.exe--toolset=msvc-10.0 --build-type=complete

msvc-10.0代表vs2010

 

2)配置

创建一个工程,附加包含目录为:F:\boost_1_55_0;附加库目录为:F: \boost_1_55_0\stage\lib


3、使用

1)正则表达式的应用

#include<iostream>
#include <boost/regex.hpp>
using namespace std;
 
int main()
{
    // 3 digits, a word, any character, 2 digits or "N/A", 
    // a space, then the first word again
    boost::regex reg("\\d{3}([a-zA-Z]+).(\\d{2}|N/A)\\s\\1");
 
    std::string correct="123Hello N/A Hello";
    std::string incorrect="123Hello 12 hello";
 
    assert(boost::regex_match(correct,reg)==true);
    assert(boost::regex_match(incorrect,reg)==false);
    cout<<"Hello Boost !"<<endl;
}


2)线程应用

    C++多线程开发是一个复杂的事情,mfc下提供了CWinThread类,和AfxBeginThread等等函数,但是在使用中会遇到很多麻烦事情,例如线程之间参数传递的问题,我们一般都是把参数new一个结构体,传递给子线程,然后释放的工作交给了子线程,这样不可避免会有内存泄漏的危险,例如线程关闭的问题,    我们一般用WaitForSingleObject来完成线程关闭工作,但是这个函数并不一定保证线程能收到要关闭的信号,这样父亲已经退出工作了,子线程还在工作,程序也会有潜在的危险。
        boost标准stl库的出现,使用boost::thread来取代不太安全的MFC线程编程。

#include <iostream>
#include <boost/regex.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
using namespace std;
boost::mutex io_mutex;

struct cont
{
	cont(int id) : id(id) { }

	void operator()()
	{
		for (int i = 0; i < 10; ++i)
		{
			boost::mutex::scoped_lock lock(io_mutex);
			std::cout << id << ": " << i << std::endl;
		}
	}

	int id;
};

int _tmain(int argc, _TCHAR* argv[])
{
	boost::thread thrd1(cont(1));
	boost::thread thrd2(cont(2));
	thrd1.join();
	thrd2.join();
	return 0;
}

3)智能指针

内存管理是一个比较繁琐的问题,C++中有两个实现方案: 垃圾回收机制和智能指针。垃圾回收机制因为性能等原因不被C++的大佬们推崇,而智能指针被认为是解决C++内存问题的最优方案。

scoped_ptr 是boost中最简单的智能指针。scoped_ptr的目的也是很简单, 当一个指针离开其作用域时候,释放相关资源。特别注意的一定就是scoped_ptr 不能共享指针的所有权也不能转移所有权。也就是说这个内存地址就只能给的声明的变量用,不能给其他使用。

下面是scoped_ptr的几个特点:

scoped_ptr的效率和空间的消耗内置的指针差不多。

scoped_ptr不能用在标准库的容器上。(用shared_ptr代替)

scoped_ptr 不能指向一块能够动态增长的内存区域(用scoped_array代替)

class test 
 { 
<span style="white-space:pre">	</span>public: 
void print() 
{ 
<span style="white-space:pre">	</span>cout << "test print now" <<endl; 
} 
};
int _tmain(int argc, _TCHAR* argv[]) 
{ 
<span style="white-space:pre">	</span>boost::scoped_ptr<test> x(new test); 
<span style="white-space:pre">	</span>x->print(); 
<span style="white-space:pre">	</span>return 0; 
}

4、总结

以上主要介绍boost库中比较常用的正则表达式、多线程和智能指针,boost库的内容非常多,但是用好的话会给我们的C++编程代理极大的方便。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天上人间555

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

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

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

打赏作者

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

抵扣说明:

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

余额充值