电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPT文档下载
分享到微信 分享到微博 分享到QQ空间

泛型编程STL 与 ACM Roba课件

  • 资源ID:146151519       资源大小:56.50KB        全文页数:40页
  • 资源格式: PPT        下载积分:20金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要20金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

泛型编程STL 与 ACM Roba课件

泛型编程,STL与ACM,何亮 2009-07,Generic Programming,实现一个max函数,返回两参数中的较大值 要求可以处理多种数据类型 方法一: int max(int a, int b) return ab?a:b; double max(double a, double b) return ab?a:b; string max(string a, string b) return ab?a:b; char max(char a, char b) 缺点:大量重复工作,扩展性差,Generic Programming,方法二: 函数模版 template T mymax(T a, T b) return a b ? a : b; /可把typename换成class,类型参数,Generic Programming,函数模版的调用 int main() cout<<mymax(3, 4)<<endl; cout<<mymax(3.1, 4.0)<<endl; string a = “roba”, b = “acm”; cout<<mymax(a,b)<<endl; ,Generic Programming,与宏替换不同,函数模版是在编译期“实例化” 隐式指定参数类型,如上所示 cout(3, 4); mymax(3, 4.1);/正确,3被转换成double型,Generic Programming,类模版:与函数模版类似 template class myClass public: T data; void output() cout<<data<<endl; ,Generic Programming,类模版的实例化 int main() myClass c; c.data = 1; c.output(); myClass c2; c2.data = “tju”; c2.output(); ,Generic Programming,类型参数可以有多个 template T f(T a, U b) 可以指定缺省类型 可以对某些特定类型进行“特化” (specialization) 可以用int作为类型参数 template ,Template Metaprogramming,template class Sum public: static const int x = Sum:x + N; ; template class Sum public: static const int x = 0; ; int main() int k = Sum:x; printf(%dn,k); return 0; ,STL: Standard Template Library 标准模版库 一些重要的概念: 容器(container): 迭代器(iterator): 指针, 内部实现: 数组 vector 支持操作: begin(), end(), size(), clear(), empty(), push_back(), pop_back() insert()O(N) erase()O(N) 可以用于数组大小不定且空间紧张的情况,Sample: TOJ1743 Kings Treasure #include #include using namespace std; vector a240010; int main() int cases,n,i,t,head,tail,src,pans; scanf(%d, Full Code,Iterator用法举例: #include #include using namespace std; int main() int n,i; vector vi; vector :iterator itr; while (scanf(%d, , 支持push_front()和pop_front() 支持push(), pop(), top() 支持push(), pop(), front(), back(), 内部实现: 双向链表 list 支持操作: begin(), end(), size(), clear(), empty() push_back(), pop_back() push_front(), pop_front() insert()O(1) erase()O(1) sort()O(nlogn),不同于中的sort, 内部实现: 红黑树 set insert() O(logn) erase() O(logn) * find() O(logn) 找不到返回a.end() lower_bound() O(logn) 查找第一个不小于k的元素 upper_bound() O(logn) 查找第一个大于k的元素 equal_range() O(logn) 返回pair 允许重复元素,用法: struct SS int x,y; struct ltstr bool operator() (SS a, SS b) return a.x st; ,UVA 105 The Skyline Problem 给定一些楼房的范围和高度,求出他们的轮廓。 Input: 1 11 5 2 6 7 3 13 9 12 7 16 14 3 25 19 18 22 23 13 29 24 4 28 Output: 1 11 3 13 9 0 12 7 16 3 19 18 22 3 23 13 29 0 维护一个BST,可以得到复杂度O(nlogn)的算法 可以使用简化编程 Code here , 内部实现: pair组成的红黑树 map insert() O(logn) erase() O(logn) find() O(logn) 找不到返回a.end() lower_bound() O(logn) 查找第一个不小于k的元素 upper_bound() O(logn) 查找第一个大于k的元素 equal_range() O(logn) 返回pair key运算符 O(logn) * 允许重复元素, 没有运算符,TOJ 1378 Babelfish Code: (0.4k) #include #include #include using namespace std; map mp; int main() char buf100,s1100,s2100; while (gets(buf) if (strlen(buf) = 0) break; sscanf(buf,%s%s,s1,s2); mp(string)s2 = (string)s1; , while (gets(buf) if (mp.find(string)buf) != mp.end() printf(%sn,mp(string)buf.c_str(); else printf(ehn); return 0; ,A challenge: TOJ 2175 Computer Games ,TOJ 2796 Erdos Number BFS 图不是以编号形式给出,而是以名字形式给出 用map进行编号 Code Here, 内部实现: 堆 priority_queue 支持操作: push() O(logn) pop() O(logn) top() O(1) See also: push_heap(), pop_heap() in ,用法举例: #include #include using namespace std; priority_queue maxheap;/int最大堆 struct ltstr bool operator()(int a,int b) return a b; ; priority_queue ,ltstr minheap;/int最小堆, 内部实现: Hash表, of course hash_map 重载HashFcn和EqualKey 支持操作: insert();O(1) earse();O(1) ; O(1) 示例:Again TOJ 1378 Babelfish See also: ,#include #include /? #include using namespace std; struct calc_hash size_t operator()(string str) const unsigned long h = 0; int i; for (i = 0 ; i < str.size() ; i+) h <<= 5; h |= stri - a; return (size_t)h;/h%M? ;,struct eqstr bool operator()(string s1, string s2) return s1 = s2; ;/本题此处可省略 int main() hash_map hp; char buf100,s120,s220; while (gets(buf) if (strlen(buf) = 0) break; sscanf(buf,%s%s,s1,s2); hp(string)s2 = (string)s1; while (gets(buf) if (hp.find(string)buf) != hp.end() printf(%sn,hp(string)buf.c_str(); else printf(ehn); return 0; , 1.sort() void sort(RandomAccessIterator first, RandomAccessIterator last); void sort(RandomAccessIterator first, RandomAccessIterator last, StrictWeakOrdering comp); 区间first,last) 复杂度O(nlogn) (n=last-first,平均情况和最坏情况),用法举例: 1.从小到大排序(int, double, char, string, etc) const int N = 5; int main() int aN = 4,3,2,6,1; string strN = “TJU”,”ACM”,”ICPC”,”abc”,”kkkkk”; sort(a,a+N); sort(str,str+N); return 0; ,2.从大到小排序(需要自己写comp函数) const int N = 5; int cmp(int a,int b) return a b; int main() int aN = 4,3,2,6,1; sort(a,a+N,cmp);/sort(a,a+N,greater() return 0;,3. 对结构体排序 struct SS int first,second; int cmp(SS a,SS b) if (a.first != b.first) return a.first first != (SS*)b)-first) return (SS*)a)-first (SS*)b)-first; return (SS*)a)-second (SS*)b)-second; qsort(array,n,sizeof(array0),cmp);,sort()系列: stable_sort(first,last,cmp);/稳定排序 partial_sort(first,middle,last,cmp);/部分排序 将前(middle-first)个元素放在first,middle)中,其余元素位置不定 e.g. int A12 = 7, 2, 6, 11, 9, 3, 12, 10, 8, 4, 1, 5; partial_sort(A, A + 5, A

注意事项

本文(泛型编程STL 与 ACM Roba课件)为本站会员(我***)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.