C++STL概述(copy).docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CSTL概述(copy)

C++STL概述(copy)混合迭代器函数在涉及到容器和算法的操作中,还有两个迭代器函数非常有用:? advance() 按指定的数目增减迭代器。? distance() 返回到达一个迭代器所需(递增)操作的数目。例如:listint iList;listint::iterator p = find(iList.begin(), iList.end(), 2);cout before: p == *p endl;advance(p, 2); // same as p = p + 2;cout after : p == *p endl; int k = 0;distance(p, iList.end(), k);cout k == k endl; advance()函数接受两个参数。第二个参数是向前推进的数目。对于前推迭代器,该值必须为正,而对于双向迭代器和随机访问迭代器,该值可以为负。使用distance()函数来返回到达另一个迭代器所需要的步骤。注意distance()函数是迭代的,也就是说,它递增第三个参数。因此,你必须初始化该参数。未初始化该参数几乎注定要失败。函数和函数对象STL中,函数被称为算法,也就是说它们和标准C库函数相比,它们更为通用。STL算法通过重载operator()函数实现为模板类或模板函数。这些类用于创建函数对象,对容器中的数据进行各种各样的操作。下面的几节解释如何使用函数和函数对象。函数和断言经常需要对容器中的数据进行用户自定义的操作。例如,你可能希望遍历一个容器中所有对象的STL算法能够回调自己的函数。例如#include iostream.h#include stdlib.h // Need random(), srandom()#include time.h // Need time()#include vector // Need vector#include algorithm // Need for_each() #define VSIZE 24// Size of vectorvectorlong v(VSIZE); // Vector object // Function prototypesvoid initialize(long ri);void show(const long ri);bool isMinus(const long ri); // Predicate function int main(){ srandom( time(NULL) ); // Seed random generator for_each(v.begin(), v.end(), initialize);//调用普通函数 cout Vector of signed long integers endl; for_each(v.begin(), v.end(), show); cout endl; // Use predicate function to count negative values // int count = 0; vectorlong::iterator p; p = find_if(v.begin(), v.end(), isMinus);//调用断言函数 while (p != v.end()) { count++; p = find_if(p + 1, v.end(), isMinus); } cout Number of values: VSIZE endl; cout Negative values : count endl; return 0;} // Set ri to a signed integer valuevoid initialize(long ri){ ri = ( random() - (RAND_MAX / 2) ); // ri = random();} // Display value of rivoid show(const long ri){ cout ri ;} // Returns true if ri is less than 0bool isMinus(const long ri){ return (ri 0);} 所谓断言函数,就是返回bool值的函数。函数对象除了给STL算法传递一个回调函数,你还可能需要传递一个类对象以便执行更复杂的操作。这样的一个对象就叫做函数对象。实际上函数对象就是一个类,但它和回调函数一样可以被回调。例如,在函数对象每次被for_each()或find_if()函数调用时可以保留统计信息。函数对象是通过重载operator()()实现的。如果Tany

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档