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;}
- 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第一个例子
- 第一章C++初步--项目2四数中的最大数
- 1004成绩排名
- source insight中添加.cc文件的支持
- Request&Response编程
- 【推荐】无线通信技术推荐学习图书目录
- boost库在工作(1)第一个例子
- Effective C++ 读书笔记(25)
- boost库在工作(2)作用域智能指针scoped_ptr之一
- Effective C++读书笔记(26)
- Leetcode Permutation II
- boost库在工作(3)作用域智能指针scoped_ptr之二
- 3364Lanterns (异或方程组高斯消元)
- boost库在工作(4)作用域智能指针scoped_ptr之三
- 避免代码注释的五大理由[转载]