• Boost学习-Linuxidc上的很好的学习资料


    来自 http://www.linuxidc.com/Linux/2011-07/39215.htm,拷贝第一页如下

    Boost学习系列

    简介及基本用法

    [日期:2011-07-25] 来源:Linux社区  作者:JuanA1 [字体: ]
     

    在 做长字符串匹配、搜索的问题时,我想大家最先想到的应该就是使用正则表达式,简单、高效。而Boost的Regex库则是不得不提的,很早之前我就接触过 了Boost的这个模块,也对Boost了解了一点点,只是觉得它很NB,没做深究。昨天在网上无意中看到了Highscore的Boost C++库系列教程,很是感兴趣,如此现代又有前途的库,是程序员提升自身技巧和竞争力的有力武器,值得一学。因此我打算和他一样做个系列连载,争取能有自 己的一点想法,再解答下每一章的练习题。今天先开个头,简单介绍下Boost库以及它的使用方法。

    一、简介

    Boost C++ 库是一组基于C++标准的现代库,其源码按 Boost Software License 来发布,允许任何人自由地使用、修改和分发。 这些库是平台独立的,且支持大多数知名和不那么知名的编译器。Boost 社区负责开发和发布 Boost C++ 库。 社区由一个很大的C++开发人员群组组成,这些开发人员来自于全球,他们通过网站 http://www.boost.org/ 以及几个邮件列表相互协调。 社区的使命是开发和收集高质量的库,作为C++标准的补充。 那些被证实有价值且对于C++应用开发非常重要的库,将会有很大机会在某天被纳入C++标准中。

    Boost 社区在1998年左右出现,当时刚刚发布了C++标准的第一个版本。从那时起,社区就不断地扩大,现在已成为C++标准化工作中的一个重要角色。虽然 Boost 社区与标准化委员会之间没有直接的关系,但有部分开发者同时活跃于两方。下一个版本的C++标准很大可能在2011年通过,其中将扩展一批库,这些库均起 源于 Boost 社区。

    要增强C++项目的生产力,除了C++标准以外,Boost C++ 库是一个不错的选择。由于当前版本的C++标准在2003年修订之后,C++又有了新的发展,所以 Boost C++ 库提供了许多新的特性。由于有了 Boost C++ 库,我们无需等待下一个版本的C++标准,就可以立即享用C++演化中取得的最新进展。

    Boost C++ 库具有良好的声誉,这基于它们的使用已被证实是非常有价值的。现在的面试询问关于Boost C++ 库知识的也越来越常见了,因为知道这些库的开发人员通常也清楚C++的最新创新,并且能够编写和理解现代的C++代码。

    很多Boost中的库功能堪称是对语言功能的扩展,其构造用尽精巧的手法,但是注意,不要贸然的花费时间研读。比如Graph这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品代码中多多利用。

    二、安装

    最新版的Boost库可以在这里下 载。安装Boost库需要花不少时间,由于这些库均带有源代码,其中大多数库只包含头文件,可以直接使用,但也有一些库需要编译。为了尽可能容易安 装,Boost提供了一个Boost Jam进行自动安装,进而无需逐个库进行检查和编译。如果要使用这个,就需要使用一个bjam的程序,它也是有源代码的,所以自然的适用于多种系统。它支 持许多操作系统和编译器,并且知道如何基于适当的配置文件来编译单个库。当然也可以单独编译,Boost可以支持多种编译器,VC、gcc、intel- linux等,也说明了它的可移植性。Windows下就无需多说了,网上很多教程,linux下也不用多说,安装方法都在/libs/库名/doc /install.html中写的很详细,有什么疑问可以看我的博文《Linux下源码安装的经验总结》 http://www.linuxidc.com/Linux/2011-07/39217.htm,实在搞不定也可以留言给我,我尽力帮助。

    三、一个例程

    下面的例子是对正则表达式Regex库的使用方法:

    1. #include "stdafx.h"   
    2. #include <cstdlib>   
    3. #include <stdlib.h>   
    4. #include <boost/regex.hpp>   
    5. #include <string>   
    6. #include <iostream>   
    7. using namespace std;  
    8. using namespace boost;  
    9.   
    10. regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");//定义正则表达式expression   
    11.   
    12. int main(int argc, char* argv[])  
    13. {  
    14.     std::string in;  
    15.     cmatch what;  
    16.     cout << "enter test string" << endl;  
    17.     getline(cin,in);  
    18.     if(regex_match(in.c_str(), what, expression))//regex_match:匹配算法,用于测试一个字符串是否和正则式匹配   
    19.     {  
    20.         for(int i=0;i<what.size();i++)  
    21.             cout<<"str :"<<what[i].str()<<endl;  
    22.     }  
    23.     else  
    24.     {  
    25.         cout<<"Error Input"<<endl;  
    26.     }  
    27.     return 0;  
    28. }   
    29.    
    30. ==============  
    31. 结果  
    32. 输入:select name from table  
    33.   
    34. 输出:str:select name from table  
    35. str:name  
    36. str:table  

    看到了吧,它很简洁的挑出了目标字符串。这里只是简单演示一下boost的使用,至于详细分析到了特定章节再说。

    四、主要库简介

    主要的库的介绍都在下表中,后面我也将根据教程一点点解析各个库。

    linux
    【内容导航】
    第1页:简介及基本用法 第2页:智能指针(上)
    第3页:智能指针(下) 第4页:函数对象(上)
    第5页:函数对象(下) 第6页:事件处理(上)
    第7页:事件处理(下) 第8页:字符串处理-(上)
    第9页:字符串处理-(下) 第10页:多线程(上)
    第11页:多线程(下)  
  • 相关阅读:
    hdu-1142(记忆化搜索+dij)
    hdu-1140(求距离,精度判断)
    hdu-1131(卡特兰数+大数)
    hdu-1130(卡特兰数+大数乘法,除法模板)
    hdu-1129(模拟题)
    hdu-1128(数学问题,筛数)
    hdu-1124(数学问题,求n!的尾零的个数)
    hdu-1115(计算多边形重心)
    hdu-1121(差分法--数学问题)
    表达式求值(堆栈)
  • 原文地址:https://www.cnblogs.com/tangxiaosheng/p/4092540.html
Copyright © 2020-2023  润新知