您的位置:学习中国 推荐教程 C++C语言 正文
原作者:kuku 添加时间:2007-06-02 原文发表:2007-06-02 人气:15 来源:互联网

本文章共9546字,分6页,当前第6页,快速翻页:
 
-----------------------------------------------------------------------------------------------------------------------------------------------

本文提示:《C++之父Bjarne谈C++中的STL模板(6)》是本站编辑们为广大网友精选的实用文章,本文阐述了关于文章的相关理论,相对来说专业性强,但是本文只是针对于某个问题提出的见解与论述,未必能辐射到相关问题的方方面面,所以本文处理问题的方法仅仅为您提供一些参考。更多问题请查阅学习中国网其他栏目哦.

-----------------------------------------------------------------------------------------------------------------------------------------------


<< ", mean==" << ad.value/ad.count << '\n';
}
  标准类库算法for_each简单地把它的第三个参数应用在自己序列中的每个元素上,并把这个参数作为返回值。另一种使用函数对象的方法比较"杂乱"--就是使用全局变量来保持value和count。

  有趣的是,简单的函数对象比功能相同的函数的性能更好。其原因在于它们趋向于按值(by value)传递,因此它们更易于内联(inline)。当我们传递那些执行很简单操作(例如用于排序的比较条件)的对象或函数的时候,这一点是非常重要的。特别地,当对简单类型(例如整型或双精度型)的数组进行排序的时候,函数对象的内联就是STL(C++标准类库)的sort()在多方面超越了传统的qsort()原因。
函数对象是用于更高级构造的一种C++机制。它并非高级理念的最好表达方式,但是它在用于普通目的的语言环境中,显示出令人惊讶的表现能力和固有的高性能。作为表现能力的一个例子,Jaakko J?rvi演示了如何提供和使用一个Lambda类,使它的真正意义合法化: Lambda x;
List::iterator p = find_if(lst.begin(),lst.end(),x<=7);
  如果你希望 <= 能够工作,那么不用建立一个通用类库,而是为Lambda和<=添加大约十余行代码定义。如果使用上面例子中的Less_than,那么我们可以简单地添加: class Lambda {};
templateLess_thanoperator<=(Lambda,const T& v)
{
 return Less_than(v);
}
  因此,find_if调用中的x<=7参数变成了operator<=(Lambda,const int&)调用,它会生成一个Less_than对象,它就是这一部分中第一个例子所使用的对象。它们之间的差别仅仅是--我们实现了更简单和直观的语法。这是C++表现能力的一个很好的例子,也是类库的接口如何比其实现更加简单的例子。自然地,与辛苦地编写一个循环来查找值小于7的元素相比,它是没有运行时开销的。

  1.3 STL的影响

  STL对C++的思想的影响是极大的。在STL之前,我一般列举C++支持的三种基本的编程样式("范例"):

   -面向过程编程

   -数据抽象

   -面向对象编程

  我认为模板是对数据抽象的支持。在试用了STL一段时间之后,我提出第四种样式:

   -泛型编程

  以使用模板为基础的技术,以及从功能性编程中获取大量灵感的技术与传统的数据抽象有本质的不同。人们只是认为类型、对象和资源不同。新的C++类库是使用模板技术编写的,才获得了静态类型安全和高效率。模板技术对于嵌入式系统编程和高性能数学运算也是很关键的,在这些环境中,资源的管理和正确性是关键。在这些领域中STL并非总是理想的。例如,它没有直接地支持线性代数,而且在紧凑的实时系统中(在这种环境下一般会禁止自由地使用存储)也很难使用它。但是,STL证明了在模板的帮助下可以实现什么样的功能,并提出了一些有效的技术示例。例如,利用迭代子(和分配器)把逻辑内存访问与实际内存访问分离开来,对于很多高性能数字运算就是很关键的;使用小型的、简单的内联、对象对于嵌入式系统编程中最佳地使用硬件也是很关键的。这类技术有一些记载在标准委员会关于性能的技术报告中了。这是对当前过度地使用过分依赖于类层次和虚拟函数的"面向对象"技术的这种趋势的一种大范围的反击--也是一种有建设意义的替代方案。

  很明显,STL并不完美。相对来说没有完美的东西。但是,它开辟了新天地,而且它拥有的影响力甚至于超过了巨大的C++群体。使用C++时,当人们试图推动STL所倡导的技术来超越STL技术的时候,它们讨论"模板元数据编程"。我们中有些人也会考虑STL迭代子的限制(使用generator和range是不是更好?),以及C++如何更好地支持这些使用(概念、初始化器)。


 
本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 5 - 6
本页地址
收藏到:[收藏夹] [百度搜藏] [新浪ViVi] [POCO网摘] [ 和讯网摘] [好哦网摘] [Google书签]
               
[搜狐网摘] [365Key网摘] [天极网摘] [我摘] [博采网摘] [igooi网摘]
相关文章

C++箴言:用成员函数模板接受兼容类型
探索C++的秘密之详解extern C
C++箴言:为类型信息使用特征类
创建可移植的64位应用程序代码
设计OutLook风格的工具栏
C++程序员必需的修养
如何编写异常安全的C++代码
在c++程序中重启自己的一种方法
踏入C++中的雷区——C++内存管理详解
C++的救赎 C++开源程序库评话
对象布局及多态探索之菱形结构虚继承
如何访问模板化基类中的名字
C++对象布局及多态之虚成员函数调用
理解隐式接口和编译期多态
C++程序中导出Word文档简易方法
C++程序设计从零开始之语句
对象布局及多态实现之成员函数的调用
C++箴言:谨慎使用私有继承
C++编程人员容易犯的10个C#错误
C语言 编程实例

相关评论


本文章所属分类:首页 推荐教程 C++C语言   C++C语言