stl标准模板库3(顺序容器)

上传人:第*** 文档编号:54413861 上传时间:2018-09-12 格式:PPT 页数:34 大小:1.14MB
返回 下载 相关 举报
stl标准模板库3(顺序容器)_第1页
第1页 / 共34页
stl标准模板库3(顺序容器)_第2页
第2页 / 共34页
stl标准模板库3(顺序容器)_第3页
第3页 / 共34页
stl标准模板库3(顺序容器)_第4页
第4页 / 共34页
stl标准模板库3(顺序容器)_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《stl标准模板库3(顺序容器)》由会员分享,可在线阅读,更多相关《stl标准模板库3(顺序容器)(34页珍藏版)》请在金锄头文库上搜索。

1、STL,顺序容器,本章内容,顺序容器的定义 迭代器和迭代器范围 顺序容器操作 vector容器自增长 容器的选择 再谈string类型 容器适配器,顺序容器类型,将单一类型元素聚集起来成为容器,任何根据位置来存储和访问这些元素,这就是顺序容器顺序容器的元素排列次序和元素值没有关系,而是由元素添加到容器中的次序决定,顺序容器的定义,思考,12 创建和初始化一个vector对象有4种方法,为每一种方式提供一个例子,并解释每个例子生成的vector对象包含什么值。3 解释复制容器对象的构造函数和使用两个迭代器的构造函数之间的差别。,容器内元素的约束,元素类型必须支持赋值运算 元素类型的对象必须可以复

2、制 注意:输入输出(IO)标准库类型不支持复制或赋值所以不能创建存放IO类型对象的容器。,容器的容器,/*容器的容器*/ vector lines;,思考,1 定义一个list对象类存储deque对象,该对象存放int类型元素。 2 为什么我们不能使用容器类存iostream对象? 3 假设有一个名为Foo的类,这个类没有定义默认构造函数,但是提供了一个需要一个int型参数的构造函数,定义一个存放Foo的list对象,该list对象有10个元素。,指针迭代器,一个指针也是一种迭代器。备注中程序同样显示了STL的一个主要特性它不只是能够用于它自己的类类型,而且也能用于任何C或C+类型,容器迭代器

3、,尽管C+指针也是迭代器,但用的更多的是容器迭代器。容器迭代器用法和上页程序一样,但和将迭代器申明为指针变量不同的是,你可以使用容器类方法来获取迭代器对象。两个典型的容器类方法是begin()和end()。它们在大多数容器中表示整个容器范围。其他一些容器还使用rbegin()和rend()方法提供反向迭代器,以按反向顺序指定对象范围。,常量迭代器,另一种防止数据被改变得方法是将容器申明为const类型。,3.3 迭代器和迭代器范围,vector和deque特殊迭代器运算,思考,迭代器的范围,迭代器范围的概念是标准库的基础first, last)左闭合区间概念 左闭合的意义: 当first和la

4、st相等时,迭代器范围为空 当first和last不相等时,迭代器范围至少有一个元素。 以上两条意味着代码可以这样写: while(first != last )+first;,一大堆练习,要标记出有效的迭代器范围迭代器需要满足什么约束? 他们指向同一个同期的元素,或者超过末端的下一个位置 如果两个迭代器不相等,则对first反复自加必须能够到达last,也就是last不能在first之前。 编写一个函数,其形参是一对迭代器和一个int型数值,实现在迭代器标记的范围内寻找该int型数值的功能,并返回一个bool结果,以指明是否找到。 重写程序,返回指向找到的元素的迭代器,确保元素不存在的情况下

5、也能工作。 使用迭代器编写程序,从标准输入设备读入若干string对象,并将它们存储在一个vector对象中,输出vector对象所有元素。 用list重写上题得到的程序,列出改变了容器类型后要做的修改。,迭代器失效的问题,移动或者删除元素后,会是被移动元素的迭代器失效,也可能同时让其他迭代器失效。,Begin,End,Begin,End,3.3 顺序容器的操作,在容器中添加元素 在容器中删除元素 设置容器的大小 (如果有的话)获取容器的第一个和最后一个元素,容器定义的类型别名,向容器中添加元素,练习,编程程序将int行的list容器的所有元素复制到两个deque容器中,list容器的元素如果

6、为偶数,则复试到一个deque容器中,如果为奇数,就复制到另一个deque容器中。假设iv是一个int型vector容器,下列程序有什么错误?,容器比较:关系操作符,C+只允许两个容器做其元素类型定义的关系运算 例子: ivce1:1 3 5 7 9 12 ivce2:0 2 3 6 8 10 12 ivce3:1 3 9 ivce4:1 3 5 7 ivce5:1 3 5 7 9 12 下列比较的结果: ivce1 ivce2 ivce2 ivce1 ivce1 ivce3 ivce1 ivce4 ivce1 = ivce5 ivce1 = ivce4 ivce1 != ivce4,思考,编

7、写程序判断一个vector容器所包含的元素是否与一个list所包含的元素相同。假设C1和C2都是容器,下列用法给C1和C2的元素类型带来什么约束? if(c1 c2) (如果有的话)对C1和C2的约束又是什么?,容器大小的操作,访问容器元素,删除元素,练习,需要删除一段元素时候,如果val1和val2相等,那么程序会发生什么情况?如果其中有一个不存在,或者两个都不存在,会怎样?假设有如下ia的定义:int ia = 0,1,1,2,3,5,8,13,21,55,89;将ia赋值到一个vector和一个list容器中,使用单个迭代器参数版本的erase函数将list容器中的奇数值元素删除掉,然后

8、将vector容器中的偶数值元素删除掉。编写一个程序处理一个string类型的list容器,在改容器中寻找一个特殊值,如果找到,将它删除。用deque重写上述函数。,赋值与swap,赋值操作首先删除其左操作容器中的所有元素,然后将右操作符插入到左边容器中:,容器的自增长,1, 重新分配内存空间,用于存放原来的元素以及新添加的元素 2,存放在旧存储空间的元素被赋值到新存储的空间里 3,插入新元素 4,撤销旧的存储空间,NEW,对于不连续的存储元素容器,不存在这样的内存分配问题,capacity和reserve,capacity(容量)和size(长度): size是指容器当前拥有的元素个数 ca

9、pacity则是指容器必须分配新存储空间之前可以存储的元素总数,容器的选用3-1,1.插入操作如何影响容器的选择,NEW,NEW,容器的选择3-2,2.元素的访问如何影响容器的选择 通常来说,除非找到使用其他容器的更好理由,否则vector容器都是最佳选择,容器的选择3-3,2.选择容器提示 如果程序要求随机访问元素,则应使用vector或者deque 如果程序必须在容器中间插入或者删除元素,则因使用list 如果程序不是在容器的中间位置,而是在容器的首部或者尾部插入或者删除数据,则应采用deque如果只需要在读取输入的时候在容器中间插入元素,然后需要随机访问,该怎么办? 如果既要随机访问又必须在容器中插入或者删除元素,应该怎么办?,2010-12-12 根据adrian版修改建立 彭君 2011-01-11 调整部分代码 彭君,修改记录,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号