第十五讲 标准模板库 STL:Standard Template Library.

Slides:



Advertisements
Similar presentations
如何學好數學? 黃駿耀老師
Advertisements

辅助核算 3.5.
10 郑和远航.
三个偶像的故事和功绩 ——第12课 明清时期的反侵略斗争 董飞燕.
捣蛋鬼历险记 初一四班 孙嘉佑小组.
中國歷史 明代之患禍及民變.
10 郑和远航 郑和 郑和,1371年生于云南昆阳州(今昆明晋宁县)一个信奉伊斯兰教的回族家庭,原名马和,小字三宝,十一岁时在明太祖朱元璋发动的统一云南的战争中被俘进宫,后当朱元璋四子燕王朱棣的近侍。1403年朱棣登基,史称明成祖。次年正月初一,朱棣念他有勇有谋,屡立奇功,便赐姓“郑”,改称郑和,并提拔为内宫太监,于永乐三年(1405年7月11日)率领庞大船队首次出使西洋。自1405年到1433年,漫长的28年间,郑和船队历经亚非三十余国,涉十万余里,与各国建立了政治,经济,文化的联系,完成了七下西洋的伟
明清 抗击外国侵略的英勇斗争 雅克萨反击战(俄) 戚继光抗倭(日) 郑成功收复台湾(荷兰) 荷兰 俄 罗 斯 日 本 台湾 沙 俄 入 侵
戚继光抗倭.
刑事訴訟法 授課人:林俊益副教授 時間:95.9.~96.6..
妩媚人生 云 计 算 与 大规模数据并行处理技术 黄 宜 华 南 京 大 学 计算机科学与技术系 软件新技术国家重点实验室 妩媚人生 妩媚人生
第16 课 中外的交往与冲突 授课人:鲍婷.
历史上的中日关系.
云南外事外语职业学院 入党积极分子培训 赵田甜.
第四章 清代臺灣的社會文化變遷 第一節 移墾社會的形成
認識食品中毒 一、什麼是食品中毒? 二人或二人以上攝取相同的食品而發生相似的症狀,並且自可疑的食餘檢體及患者糞便、嘔吐物、血液等人體檢體,或者其它有關環境檢體(如空氣、水、土壤等)中分離出相同類型(如血清型、噬菌 體型)的致病原因,則稱為一件“食品中毒”。 但如因攝食肉毒桿菌毒素或急性化學性中毒而引起死亡,即使只有一人,也視為一件“食品中毒”。
題目:四大古文明 班級:六年八 班 組員:賴宣光.游家齊.陳羿文 吳佳芬.許淑婷.許芳瑜..
食 物 中 毒.
琦君 《髻》 S 康倩瑜.
眼乾乾唔使慌.
滑膜皱襞综合征.
“公平”是最热的关键词 1、胡锦涛首次进行“总动员”,提出“在促进发展的同时,把维护社会公平放到更加突出的位置” 。
贵州省公务员面试 备考指导 中公教育 面试讲师 刘运龙.
外 套 各式領型與變化 武 玫 莉 製 作.
第4节 人体对食物的消化吸收.
陈冤之魅,心鬼之泪 ——雾里探花 《东方快车谋杀案》 By第二小组.
高考作文等级评分标准/发展等级10分 深刻 丰富 有文采 有创意 ①透过现象 深入本质 ②揭示问题 产生的原因 ③观点具有 启发作用
文明礼仪在我心 文明礼仪在我心.
第10课 社会生活的变迁.
故事会 盘古开天劈地 在很久很久以前,天地可不象我们现在看到的这样————天高高的在上面,地在我们的脚下,中间隔着几千几万米远。那个时候的天地就象是一个包在大黑壳里的鸡蛋,混混沌沌的,什么也看不清。人们走路都得弯着腰,耕田打猎都很不方便,因为一不小心抬个头,就会碰到天,惹它生气,接着就会招来狂风暴雨。因此所有的植物也都长不高,所以结的粮食和果实都很少,根本就不够大家吃。还经常会发生饿死人的事情。
面向三农,拓宽信息渠道 辐射千村,服务百万农民
三招 让孩子爱上阅读 主讲人:芝莺妈妈 2012年10月19日.
FUZHUANGZHITUYANGBANZHIZUO
如何挑選吳郭魚 嗨~ 餐旅二乙 4a2m0105 白妤潔 4a2m0122 何姿瑩.
学校春季呼吸道传染病预防知识 连云港市疾病预防控制中心
服裝整理概論.
印染纺织类艺术.
创业计划书的编写.
创业计划书撰写.
第九章 进行充分调研 选择自主创业.
香溢饺子馆创业计划书.
第三章 中国的民族民俗 第一节 概论 第二节 汉族 第三节 满族 蒙古族 维吾尔族 回族 朝鲜族 第四节 壮族 土家族 苗族 黎族
第 4 章 投资银行: 基于资本市场的主业架构.
创业数字图书馆.
中国管理科学发展探索 成思危 2006年8月18日于上海复旦大学.
“四文”交融,虚实并举,打造具有鲜明职教特色的校园文化 ——江苏省扬州商务高等职业学校校园文化建设汇报
103年度高職優質化輔助方案計畫申辦及輔導訪視說明會
“十二五”科技发展思路 与科技计划管理 科技部发展计划司 刘敏 2012年9月.
社区妇幼保健工作 江东区妇幼保健院 胡波瑛.
人生不要太圓滿 ◎ 張忠謀.
导致羊水过少的五大因素.
胎教.
怎样进行一次宣讲 何惠玲.
第三课 中国共产党的历程.
[聚會時,請將傳呼機和手提電話關掉,多謝合作]
规范母婴保健服务 努力降低孕产妇死亡率 市卫生局基妇科 朱静.
中国地质科学院矿产资源研究所 财务报账培训
白天的月亮 想與日爭輝 人生不要太圓滿 文字取自於:張忠謀 攝於陽明山 阿道的攝影工作坊.
第十章(上) 实现中华民族的伟大复兴.
营养要均衡.
ㄩ.
高中新课程历史必修(Ⅰ) 教材比较研究 四川师范大学历史文化学院教授 陈 辉 教育部2009普通高中历史课改远程研修资料.
十年职业生涯规划 —— 年 姓名:刘娟 学号:.
主考官眼中的面试 ——面试主考官教你备战2016年国考面试 主讲老师:李海鹏.
国内知名高校 医学院(部、中心) 院系及附属医院设置情况 调研报告
財務報表分析 授課教師:陳依婷.
第六章 可供出售金融资产 一、可供出售金融资产的概念和特征 二、可供出售金融资产的核算.
主讲人:刘文波 (四会国税 政策法规股) 2014年4月
智慧宁波 智慧财税 . 宁波市地方税务局.
第六模块礼仪文书写作 第一节求职信、应聘信 QIUZHIXINYINGPINXIN.
Presentation transcript:

第十五讲 标准模板库 STL:Standard Template Library

标准模板库 STL C++ STL 是一套功能强大的 C++ 模板库,提供了大量的通用模板类和模板函数,这些模板类和模板函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈,等等。

STL 三大核心组件 容器 Containers 用来存储数据的一种数据结构(模板类),如向量,链表 算法 Algorithms 对数据的各种操作(模板函数),如插入,排序,搜索等 迭代器 iterators 访问容器中的数据的方法,作用类似于指针

容器 Containers 顺序容器/序列容器 关联容器 容器适配器

容器:顺序容器 顺序容器/序列容器(Sequential Containers) vector 按顺序(物理)存储数据,如数组,链表等  数据结构 vector 只能在最后面插入或删除数据 deque 与 vector 类似,但允许在最前面插入或删除数据 list 双向链表,可在任意位置插入或删除数据 forward_list 与 list 类似,但是单向的,只能沿一个方向访问 array 数组,长度不能改变 string 字符串,与 vector 类似,但存储的是字符

array:长度固定,可随意访问其中的任何元素 obj vector:与数组类似,且长度可变,但只能在最后面添加或删除数据 obj new deque:与 vector 类似,但可在两头添加或删除数据 new obj new

list:双向链表,可在任意位置添加或删除数据,但只能从第一个 元素或最后一个元素开始访问 new new obj obj obj obj obj obj forward_list:单向链表,与 list 类似,但只能单向访问 new new obj obj obj obj obj obj

容器:关联容器 关联容器(Associative Containers) 按排序方式存储数据,就像词典一样  方便搜索 set 按排序方式存储数据,就像词典一样  方便搜索 set 存储互不相同的数据,插入数据时进行排列 unordered_set 与 set 类似,但按 Hash 值排序 map 存储“键-值”对,按唯一的键排序 unordered_map 与 map 类似,但按“键”的 Hash 值排序 multiset 与 set 类似,但允许有相同的数据 unordered_multiset 与 unordered_set 类似,但允许有相同的数据 multimap 与 map 类似,但不要求“键”唯一 unordered_multimap 与 unordered_map 类似,但不要求“键”唯一

容器适配器 容器适配器(Associative adapters) 顺序适配器和关联适配器的变种,增加一些特殊功能 stack queue 栈,按后进先出(LIFO)方式存储数据 queue 队列,按先进先出(FIFO)方式存储数据 priority_queue 队列,但能保证最大元素总在最前面

算法 Algorithms 对容器进行的常见操作,如排序,查找,反转等等,也 就是容器所具有的功能(成员函数)。 find find_if #include <algorithm> find 查找指定的值 find_if 根据条件查找 reverse 反转 remove_if 根据条件删除相应的数据 transform 根据用户给定的方法对数据进行交换

容器常见成员函数 begin() end() size() capacity() empty() max_size() front() 返回开始迭代器 end() 返回结束迭代器 size() 返回实际元素个数 capacity() 返回当前容量 empty() 判断是否为空 max_size() 返回元素个数的最大值 front() 返回第一个元素的引用 back() 返回最后一个元素的引用 push_back() 在序列的尾部添加一个元素 pop_back() 移出序列尾部的元素 clear() 移出所苻的元素,容器大小变为 0 resize() 改变实际元素的个数

容器常见成员函数(续) at() assign() insert() erase() swap() data() sort() 使用索引访问元素,会进行边界检查 assign() 用新元素替换原有内容 insert() 在指定的位置插入一个或多个元素 erase() 移出一个元素或一段元素 swap() 交换两个容器的所有元素 data() 返回包含元素的内部数组的指针 sort() 对元素进行排序 这里仅列出部分成员函数。 并非所有容器都具有这些成员函数。 容器不仅使用方便,而且效率也非常高,可代替数组。 优先使用 vector 和 string

迭代器 Iterators 访问容器中数据的方法,如指针。 要访问容器的数据,需要通过迭代器。 迭代器是算法与容器之间的桥梁。 实际上,迭代器就是一个泛型指针。 算法是作用在迭代器上,而不是容器上。 可以根据需要自己定义迭代器。

迭代器举例 vector<int> x; x.push_back(2); x.push_back(0); cout << "x: " << endl; vector<int>::iterator idx = x.begin (); // 迭代器,类似于指针 while (idx != x.end ()) { cout << *idx << endl; ++ idx; }

迭代器举例(续) vector<int>::iterator fidx; ex15_iterator.cpp vector<int>::iterator fidx; fidx = find (x.begin (), x.end (), 9); // 寻找满足条件的数据,返回迭代器(类似于地址) if (fidx != x.end ()) { int shift = distance(x.begin (), fidx); // 计算与开头元素的间距,即在向量中的位置 cout << "要找的值为:"<< *fidx << endl; cout << "位置:" << shift << endl; }