程序设计实习第二十一讲标准模板.pptx

程序设计实习第二十一讲标准模板.pptx

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:19108035856(电话支持时间:9:00-19:00)。
程序设计实习第二十一讲 标准模板库 STL-II主讲教师:田永鸿2008年5月26日第一页,共五十页。内容回顾容器类模板和迭代器顺序:vector(随机) deque (随机) list(双向)关联:set (双向) multiset (双向) map (双向) multimap (双向)容器适配器:stack(不支持) queue (不支持) priority_queue (不支持)每一类迭代器所能执行的操作不一样。函数模板find p = find(v.begin(),v.end(),9); //vector int * pp = find( array,array+4,20);//数组copy ostream_iterator<int> output(cout ,“*"); copy (v.begin(),v.end(),output);重点介绍了vector类模板(其实就是动态数组, 尾部添加数据, 用户无需维护内存) 空构造函数 数组构造 push_back() erase() vector<int>::iterator p第二页,共五十页。课堂问题(1)给定如下list容器,下述哪些语句是错误的?为什么? list<int> v; list<int>::const_iterator ii; (a)for( ii = v.begin(); ii != v.end ();ii ++ ) cout << * ii; (b)for( ii = v.begin(); ii < v.end ();ii ++ ) cout << * ii; (c)for(int i = 0;i < v.size() ; i ++) cout << v[i]; 下列语句是否存在错误?若有,则改正;若无,请输出结果vector<int> v; v.push_back(1); v.push_back(2); vector<int>::reverse_iterator r; for( r = v.rbegin();r != v.rend();r--) cout << * r << ",";第三页,共五十页。由于单词数目未知,且需要以非确定的顺序处理这些单词,因此vector最合适,因为它支持随机访问;采用list实现最合适,因为需要在容器的任意位置插入元素。(实际上本节将讲述的关联容器更好)采用deque实现最合适若一边输入一边排序,则list最合适,因为读入时需要在容器的任意位置插入元素来实现排序;若先读入所有整数再排序,采用vector最合适,因为进行排序最好有随机访问能力。课堂问题(2)下面的迭代器的用法哪些(若存在的话)是错误的?const vector<int> ivec(10);vector<string> svec(10);list<int> ilist(10);(a) vector<int>::iterator it=ivec.begin();(b) list<int>::iterator it=ilist.begin()+2;(c) vector<string>::iterator it=&svec[0];(d) for (vector<string>::iterator it=svec.begin(); it != 0; ++it)//……对于下列程序任务,采用哪种顺序容器是实现最合适?解释选择的理由?(a)从一个文件中读入未知数目的单词,以生成英文句子;(b)读入固定数目的单词,在输入时将它们按字母序插入到容器中。(c)读入未知数目的单词,总在容器尾部插入新单词,在容器首部删除下一个值;(d)从一个文件中读入未知数目的整数,对这些整数排序,然后把它们输出到标准输出设备。第四页,共五十页。课堂问题(3)若iv是一个int型的vector容器,下面的程序错在哪里?如何改正? vector<int>::iterator mid=iv.begin()+iv.size()/2; while (vector<int>::iterator iter != mid) if (iter == some_val) ….. 添加一条语句后,下面的程序是否还有错?如何改正? vector<int>::iterator iter =iv.begin(); vector<int>::iterator mid=iv.begin()+iv.size()/2; while (vector<int>::iterator iter != mid) if (*iter == some_val) iv.insert(iter, 2* some_val); vector<int>::iterator iter =iv.begin(); while (i

您可能关注的文档

文档评论(0)

189****6885 + 关注
实名认证
内容提供者

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

认证主体刘**

相关文档

相关课程推荐