天天看點

淺談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、增強函數的靈活性和自控性。

繼續閱讀