浅谈STL仿真函数

今天很好的兴志,一下子写了二篇文章,当然也不吝啬第三篇了。


  • STL概述

      STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
      STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。 


  • STL仿真函数

       函数的仿真通俗的讲就是给需要实现的函数换一个名称,但归根结底函数的地址是不变的。因此就有了函数指针的仿真方式,接下来我先介绍一下函数指针仿真的实现方法。


#include "iostream.h"

#define N 100

void array_in(int n,float x[]);

float average(int n,float x[]);

float max(int n,float x[]);

float min(int n,float x[]);

void main()

{ int i,n;float x[N];

  char *str[3]={"average","max","min"};

  float (*fun[3])(int n,float x[])={average,max,min};

  cout<<"n=";cin>>n;

  array_in(n,x);

  for(i=0;i<3;i++)

    cout<<str[i]<<"="<<(*fun[i])(n,x)<<endl;

}

 

     函数指针虽然能达到函数仿真的效果,但是有个缺陷,就是忽略了函数的状态。如下通过STL方式进行仿真的实现代码。


#include<iostream.h>

Template<class T>

Struct plus{

   Plus()

   {flag = 1;}

   T operator()(const T& x,const T& y) const

{

 Cout << “flag = “ <<endl;

 return x + y;

}

Int flag;

};

Test

Int main()

{ cout << plus<int>(12,45)<<endl;

 Return 0;

}


  •  STL仿真函数的好处

1、增强程序的可靠性和健壮性。

2、增强函数的灵活性和自控性。

时间: 2024-10-19 00:23:23

浅谈STL仿真函数的相关文章

浅谈JSON.stringify 函数与toJosn函数和Json.parse函数

原文:浅谈JSON.stringify 函数与toJosn函数和Json.parse函数 JSON.stringify 函数 (JavaScript)   语法:JSON.stringify(value [, replacer] [, space]) 将 JavaScript 值转换为 JavaScript 对象表示法 (Json) 字符串. value 必需. 要转换的 JavaScript 值(通常为对象或数组). replacer 可选. 用于转换结果的函数或数组. 如果 replacer

浅谈使用splice函数对数组中的元素进行删除时的注意事项_javascript技巧

使用splice函数对数组中的元素进行删除时的注意事项 删除值为c的元素: <script> var arr = new Array(); arr[0] = 'a'; arr[1] = 'b'; arr[2] = 'c'; arr[3] = 'c'; arr[4] = 'e'; for(var i=0; i<arr.length; i++){ if(arr[i] == 'c'){ arr.splice(i,1); i=i-1; // 必须对i减去1,否则后面的一个元素会被跳过去 } }

浅谈PHP eval()函数定义和用法

eval() 函数把字符串按照 PHP 代码来计算. 该字符串必须是合法的 PHP 代码,且必须以分号结尾. 如果没有在代码字符串中调用 return 语句,则返回 NULL.如果代码中存在解析错误,则 eval() 函数返回 false. 语法 eval(phpcode) 参数 描述 phpcode 必需.规定要计算的 PHP 代码. 提示和注释 注释:返回语句会立即终止对字符串的计算. 注释:该函数对于在数据库文本字段中供日后计算而进行的代码存储很有用. 例子 <?php $string =

浅谈Jquery核心函数_jquery

      在Jquery中,所有的DOM对象都将封装成Jquery对象,而且只有Jquery对象才能使用Jquery方法或者属性来执行相应的操作. 所以Jquery提供了一个可以将DOM对象封装成Jquery对象的函数,就是Jquery核心函数jquery(),也称为工厂函数. jquery核心函数有7个重载,分别如下: jquery()  该函数返回一个空的jquery对象. jquery(elements)  该函数将一个或多个DOM元素转化为Jquery对象(或jquery集合) jqu

浅谈jQuery效果函数_jquery

jQuery有很多的效果可以实现,比如说淡入淡出的效果:<html> <head> <style> #box{width:200px;height:200px;background:red;opacity:1;} </style> </head> <body> <div id="box"> </div> <input type="button" value=&quo

浅谈javascript回调函数_基础知识

把函数作为参数传入到另一个函数中.这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB.当B层要用到某个模块的数据,于是他对A层人员说,我需要你们提供满足某种需求的数据,你给我提供一个接口. A层的人员说:我给你提供数据,怎么展示和处理则是B的事情. 当然B层不可能为你每个需求都提供一个数据接口,B给A提供一个通过的接口.B得到数据,然后B写函数去展示. 即,你需要和其他人合作,别人提供数据,而你不需要关注别人获取

浅谈JavaScript function函数种类_基础知识

本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 复制代码 代码如下: function ShowName(name) {     alert(name); } 1.2 Js中同名函数的覆盖 在Js中函数是没有重载,定义相同函数名.不同参数签名的函数,后面的函数会覆盖前面的函数.调用时,只会调用后面的函数. 复制代码 代码如下: var n1 = 1;   function add(value1) {     return n1 + 1; } alert(add(n1))

浅谈mysql 自定义函数_Mysql

因为工作需要,要写一个mysql的自定义行数,如下 DELIMITER $$ DROP FUNCTION IF EXISTS `onlineFunction`$$ CREATE FUNCTION `onlineFunction`(rrrr VARCHAR(50)) RETURNS VARCHAR(255) BEGIN IF(rrrr='online') THEN RETURN '上线';END IF; END$$ DELIMITER ; 第一行DELIMITER 定义一个结束标识符,因为MySQ

浅谈jquery回调函数callback的使用_jquery

回调函数必须是全局函数或者静态函数,不可定义为某个特定的类的成员函数 callback函数在当前动画100%完成之后执行 复制代码 代码如下: $("p").hide(1000); alert("the paragraph is now hidden"); <!--未使用回调函数,段落未完全隐藏时就弹出信息--> $("p").hide(1000,function(){alert("the paragraph is now