boost库在工作(1)第一个例子
来源:互联网 发布:js正则 编辑:程序博客网 时间:2024/06/06 18:34
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;}
作者: 蔡军生
QQ:9073204
- boost库在工作(1)第一个例子
- boost库在工作(1)第一个例子
- CMake 简明教程(1)---第一个例子
- odoo之学习第一个例子test(1)
- JSF&JBoss5.1第一个例子
- 编译jrtplib第一个例子(转载)
- Hibernate第一个例子(二)
- CAD二次开发(C#)第一个例子
- 5、第一个例子
- opengl 第一个例子
- hibernate第一个例子
- ajax 第一个例子
- JavaBeans第一个例子
- SiteMesh第一个例子
- Mina第一个例子
- Hibernate---->第一个例子
- Servlet第一个例子
- struts2第一个例子
- 0106
- 实习外传
- Robocode Tank AI 实例
- 锁无关的数据结构与Hazard指针——操纵有限的资源
- Eclipse下使用Antenna进行J2me打包
- boost库在工作(1)第一个例子
- Hibernate type java.sql.Clob或java.sql.Blob如何用
- C#汉字转换为拼音
- 开发过程精摘
- qt和linux下的input设备
- 考虑成员资源情况和各个任务间的关系
- 0107
- windows 下安装memcache
- Android开发--Http操作介绍(一)