- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
标准模板类库 第十一章 准模板库
第十一章 标准模板库(STL) 11.1 标准模板库简介 11.1 标准模板库简介 11.1 标准模板库简介 11.1 标准模板库简介 11.1 标准模板库简介 11.1 标准模板库简介 11.1 标准模板库简介 11.1 标准模板库简介 11.2 迭代子类 11.2 迭代子类 11.2 迭代子类 11.2 迭代子类 11.2 迭代子类 11.2 迭代子类 11.2 迭代子类 11.2 迭代子类 11.2 迭代子类 11.2 迭代子类 11.2 迭代子类 11.3 顺序容器 11.3 顺序容器 11.3 顺序容器 11.4 关联容器 11.4 关联容器 11.4 关联容器 11.4 关联容器 11.5 容器适配器 11.5 容器适配器 11.6 泛型算法与函数对象 11.6.1 函数对象 11.6.1 函数对象 11.6.1 函数对象 11.6.1 函数对象 11.6.1 函数对象 11.6.1 函数对象 11.6.1 函数对象 11.6.1 函数对象 11.6.1 函数对象 11.6.2 泛型算法 11.6.2 泛型算法 11.6.2 泛型算法 11.6.2 泛型算法 11.7 VC++中的STL 【例11.5】优先级队列类演示,头文件用queue,优先级用数表示,数值越大优先级越高。 #includeiostream #includequeue #includefunctional using namespace std; void main(){ priority_queueint prioque; //实例化存放int值的优先级队列,并用deque作为基础数据结构 prioque.push(7); //压入优先级队列 prioque.push(12); prioque.push(9); prioque.push(18); cout从优先级队列中弹出endl; while(!prioque.empty()){ coutprioque.top()\t; //取最高优先级数据 prioque.pop(); } //弹出最高优先级数据 coutendl; } 输出结果为: 从优先级队列中弹出:18 12 9 7? 算法表现为一系列的函数模板,它们是STL中最类似于传统函数库的部分。它们不是作为预先编译好的对象模块组成的可链接库来提供。它们完整定义在STL头文件中。使用者可以用很多方式来特化每一个模板函数,大大提高了它作为通用型程序组件的适用性。一般这些函数模板都使用迭代子作为它的参数和返回值,以此在容器(序列)上进行各种操作。如每个容器都可使用find()算法。 11.6.1 函数对象 11.6.2 泛型算法 在C++中,为了使程序的安全性更好,采用“引用”来代替指针作为函数的参数或返回值。在C++的泛型算法中类似地采用了“函数对象”(function object)来代替函数指针。函数对象是一个类,它重载了函数调用操作符(operator())。该操作符封装了应该被实现为一个函数的操作。典型情况下,函数对象被作为实参传递给泛型算法。和“引用”一样,“函数对象”独立使用比较少。函数对象亦称拟函数对象(function_like object)和函子(functor) 每个泛型算法(generic algorithm)的实现都独立于单独的容器类型,它消除了算法的类型依赖性。 【例11.6】求和函数对象的定义和测试。 函数对象是一个类,它重载了调用操作符“()”。使用方法与类模板相同: #includeiostream.h templatetypename Tclass Sum{ T res; public: Sum(T i=0):res(i){} //构造函数,即sum(T i=0){res=i;} T operator()(T x){res+=x;return res;} //累加,重载的调用操作符() T result() const {return res;} }; templatetypename FuncObject,typename T T Func1(FuncObject fob,const T val){return fob(val);} //不可实现累加 templatetypename FuncObject,typename T T Func2(FuncObject fob,const T val){return fob(val);
文档评论(0)