boost库在工作(1)第一个例子

来源:互联网 发布:想开淘宝怎么找货源 编辑:程序博客网 时间:2024/06/05 08:51

C++是一门博大高深的语言,提供了众多编程模式,以及其技术,其中有一项重要的技术,叫做模板技术。所谓的模板,就是提供一套函数或类,其中参数或成员是没有定义为特定类型,由使用者来定义它的类型。最开始这项技术主要用来解决容器类的问题,比如int、float类型的容器,就需要编写两个类才能解决。而采用模板技术之后,就算有N种类型,只需编写一个容器类就解决了,这样不仅提高了开发效率,也减少了代码的编写量,提高了维护性。下面介绍学习的boost库,就是使用模板技术来实现的,如果对模板技术还不够熟悉,建议先找相关的书本学习,再来学习本书里的内容。由于C++只是定义了一门语言,没有定义标准的类库,结果导致越来越不适应现代技术的发展,对代码的高质量,对解决问题的技术积累都落后在其它语言后面,比如JAVA、C#,它们都提供了大量基础类库,因此C++的类库也提到日程上了,在这段时间里,C++出现了STL类库,但还是很弱小、功能有限,紧接着业界就提供了一个强大的boost类库。熟练地使用boost库会提高软件的开发效率,提高代码的质量,提高开发人员多平台开发能力,因而会使用boost库,已经成为现代C++开发人员的一项基本技能了。

boost库里有很多吸引人的地方,但也比较多内容,比较复杂一些。为了有一个简单印象,先介绍一个简单的例子,通过这个例子看到,怎么样大大地提高开发效率。为此,从一个lambda表达式使用的例子开始吧。什么是lambda表达式,其实就是一个匿名函数。当你需要一个函数,并且只想使用一次时,但又不想声明这个函数,也不关心这个函数的名称,就可以使用这种表达方式。其实在编译器里,还是会自动生成这个函数的。使用lambda表达式的好处是可以提高开发效率,提高类型安全,提供更加局部化的作用域代码。

现在假设有一个问题,需要从键盘输入多个数字,并且通过乘以3倍后,再输出到控制台。

习惯的做法是如下:

//

class CMul

{

public: 

void operator()(const int v)

{      

     std::cout << v  * 3 << " ";

}

};

这里先声明一个函数操作对象,在对象里实现乘法,并输到控制台。

然后使用下面的语句,就可以把输入的一系数字串进行运算,并输出到控制台。

std::for_each(in(std::cin), in(), CMul());

比如输入:1 2 4

输出为:3 6 12

 

使用lambda表达式的做法是如下:

using namespace boost::lambda;  

std::for_each(in(std::cin), in(), std::cout << (_1 * 3) <<" ");

上面的代码通过引入boost库的lambda库,就可以简单到一行代码实现了上面的功能,并且阅读起来更加直接,更加优美很多。可见boost库会提高效率,不仅是编程效率,还会提高维护的效率,感觉如何?因此会从心底里爱上boost库的。

 

整例子完整的代码如下:

// boost_001.cpp : Defines the entry point for the console application.// #include "stdafx.h"//#include <boost/lambda/lambda.hpp>#include <iostream>#include <iterator>#include <algorithm> //class CMul{public: void operator()(const int v){           std::cout << v  * 3 << " ";}}; int _tmain(int argc, _TCHAR* argv[]){typedefstd::istream_iterator<int> in; //使用传统方式std::for_each(in(std::cin), in(),CMul()); //复位cin;if (std::cin.fail()){     std::cin.clear();     std::cin.sync();}//使用lambda表达式using namespace boost::lambda; std::for_each(in(std::cin), in(),std::cout << (_1 * 3) << " "); system("pause");return 0;}