




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+编程 2 第三部分 容器和算法 预习检查: 1 标准库定义那几种顺序容器? 2 list容器支持随机访问吗? 3 第三部分 容器和算法 第一节 顺序容器(sequential container)。它将单一类型元素 聚集起来成为容器,然后根据位置来存储和访问这些元 素,这就是顺序容器 标准库定义了三种顺序容器类型:vector、list 和deque Vector相当于c语言中的数组, list相当于c语言中的链表, 而deque则是双端可以插入的vector 4 第三部分 容器和算法 5 第三部分 容器和算法 容器的容器 vector lines; / vector of vectors 迭代器和迭代器范围 *iter 返回迭代器 iter 所指向的元素的引用 iter-mem 对 iter 进行解引用,获取指定元素中名 为 mem 的成员, 等效于(*iter).mem 6 第三部分 容器和算法 vector 和 deque支持通过元素位置实现的随机访问, 因此它们的迭代器可以有效地实现算术和关系运算 用于计算 vector 对象的中点位置: vector:iterator iter = vec.begin() + vec.size()/2; 7 第三部分 容器和算法 list 容器的迭代器既不支持算术运算(加法或减法), 也不支持关系运算(=, ),它只提供前置和后 置的自增、自减运算以及相等(不等)运算。 /copy elements from vec into ilist list ilist(vec.begin(), vec.end(); ilist.begin() + ilist.size()/2; / error: no addition on list iterators 8 第三部分 容器和算法 在顺序容器中的操作 将元素值复制到容器里 c.push_back(t) /顺序容器都支持的操作 c.push_front(t) 只适用于 list 和 deque 容器类型. c.insert(p,t) 在迭代器 p 所指向的元素前面插入值为 t 的新元素 9 第三部分 容器和算法 访问元素 访问顺序容器内元素的操作 c.back() 返回容器 c 的最后一个元素的引用。 c.front() 返回容器 c 的第一个元素的引用 cn 返回下标为 n 的元素的引用只适用于 vector 和 deque 容器 c.at(n) 返回下标为 n 的元素的引用 只适用于 vector 和 deque容 器 程序员必须保证在指定下标位置上的元素确实存在。下标操作符 本身不会做相关的检查 10 第三部分 容器和算法 删除元素 c.erase(p) 删除迭代器 p 所指向的元素 返回一个迭代器,它指向 被删除元素后面的元素 c.erase(b,e) 删除迭代器 b 和 e 所标记的范围内所有的元素 c.clear() 删除容器 c 内的所有元素。返回 void c.pop_back() 删除容器 c 的最后一个元素。返回 void。 c.pop_front() 删除容器 c 的第一个元素。返回 void。 只适用于 list 或 deque 容器 删除容器内的一个元素 删除一部分元素erase 操作也不ty会检查它 的参数。程序员必须确保用作参数的迭代器或迭代器范围是有效 的 11 第三部分 容器和算法 赋值与swap c1 = c2 删除容器 c1 的所有元素,然后将 c2 的元素复制给 c1 c1.swap(c2) 交换内容:调用完该函数后,c1 中存放的是 c2 原来 的元素,c2 中存放的则是 c1 原来的元素。c1 和 c2 的类型必须 相同。该函数的执行速度通常要比将 c2 复制到 c1 的操作快 12 第三部分 容器和算法 选择容器类型的法则: 1. 如果程序要求随机访问元素,则应使用 vector 或 deque 容器。 2. 如果程序必须在容器的中间位置插入或删除元素,则应采用 list 容器。 3. 如果程序不是在容器的中间位置,而是在容器首部或尾部插入 或删除元素,则应采用 deque 容器。 13 第三部分 容器和算法 容器的总结 标准库的顺序容器有三个类型 vecotor : 支持随机访问 list: 不支持随机访问 deque: 支持随机访问 容器的常用操作 插入: push_back(), insert() 删除: erase() 访问: back() 14 第三部分 容器和算法 使用泛型算法必须包含 algorithm 头文件:#include 标 准库还定义了一组泛化的算术算法 #include 算法accumulate int sum = accumulate(vec.begin(), vec.end(), 42); /sum 设置为 vec 的元素之和再加上 42 string sum = accumulate(v.begin(), v.end(), string(“); 算法replace replace(ilst.begin(), ilst.end(), 0, 16);/把0替换为16 算法count int times = count(ivec.begin(), ivec.end(), 0); /统计出现的次数 15 第三部分 容器和算法 排序算法 bool cmp(int i, int j) return ij; int main() vector vec; for(int i=10; i-1; i-) vec.push_back(i); sort(vec.begin(), vec.end(), cmp); for(int i=0; ij; int main() vector vec; for(int i=10; i-1; i-) vec.push_back(i); sort(vec.begin(), vec.end(), cmp); for(int i=0; i vec; for(int i=0; i:iterator it = find_if(vec.begin(), vec.end(), find_5); if(it!=vec.end() cout j; int main() vector vec; for(i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 井矿盐制盐工理论知识考核试卷及答案
- 税务筹划销售管理办法
- 空白储蓄凭证管理办法
- 乐器数据融合分析-洞察及研究
- 劳动的快乐五百字12篇
- 民族迁移与文化融合历史地理与可持续发展-洞察及研究
- 爱情中安全感心理测试题及答案解析
- 安全员c3山西1000题库及答案解析
- 产品研发流程标准化模板提升研发质量
- 勇敢的重要性议论文探讨勇气对个人成长的影响(9篇)
- 供应链经理上半年工作总结
- 开学防自然灾害 反毒品安全主题班会 课件
- 北师大版七年级数学上册丰富的图形世界《从立体图形到平面图形》第二课时示范公开课教学课件
- 视频制作及推广合同
- 输变电工程监督检查标准化清单-质监站检查
- 2025年中国东方航空集团招聘笔试参考题库含答案解析
- 临床研究课题验收报告
- 扳机点(激痛点)疗法(理论及实操演示附全身激痛点分布图)
- 2024ESC心房颤动管理指南解读
- 《预防未成年人犯罪》课件(图文)
- 医院数据分级分类制度
评论
0/150
提交评论