STL

泛型编程 generic programming (GP)。

标准模块库 standard template library (STL)。

STL两个部分:容器vector list (序列式容器 sequential container ) set map(关联式容器 associate container)。

                          map   一对对的 key /value 组合。

                           set   很多key 的集合。

                           泛型算法 find() sort() replace() merge()。

                          两个技术达到generic   函数模板(template) 与类型无关。

                                                                   iterator 与容器类别无关。

实现和应用举例

vector<int>  vec(10)                    

vec[5] = 10  //这样做是合法的。

函数模板

template <typename elemType>
elemType* find(const vector<elemType> &vec,const elemType &value)
{

}


解决与容器类别无关化。iterator 登场了。登场之前应该是用指针来替代数组和VECTOR首地址。指针只人地址。不管你的类别。

vector 和 array 的区别: vector 可以是空的 而 array 不能是空的。单二者都使用连续的内存块。

这样就是算法和 具体的 vector 或者 array 容器无关了。

不过,list map set  还不行。

具体实现就是定义 一些类 iterator 。该类拥有 比较 前进等运算符的重载。

下边是个例子程序,展示使用iterator.


这样就大致表现了iterator 的用法。

一些容器的泛型算法举例

vector<int> ivec;             vector<int> ivet(10);            vector<int> ivec(10,-1) ;             vector<int> ivec(ia,ia+8) //ia[20];        vector<int> ivec1(ivec2);

list<string> slist;       list<string> slist(20);         list<string> slist(20,"unassigned");   list<string> slist(ia,ia+8);             list<string> slist1(slist2);

push_back()

如何设计一个泛型算法?这比设计一个容器简单得多了。

要做的工作一个就是用木板屏蔽参数类型,用迭代器屏蔽容器类型,用 函数对象 扩大功能。

 

下面该是讨论让泛型算法更猛的东西了。比如以个find_if().可以让他的比较 ==  >  <.等。这就是 函数指针或者 函数对象做 参数的问题了。使用函数对象主要是为了效率。

一般function object 更常用。

配接器(adapter)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值