chdoca的个人博客分享 http://blog.sciencenet.cn/u/chdoca

博文

C++Primer学习笔记

已有 3718 次阅读 2012-5-17 00:20 |个人分类:学习心得|系统分类:科研笔记| 学习

第九章 顺序容器(5.16

 

本章对第三章的内容进行完善,继续讨论标准库提供的顺序容器类型。顺序容器的内容按其位置进行访问和存储,除此之外还有关联容器,关联容器按键(key)进行访问和存储。

容器共享公共的接口(操作),因此只要学会其中的一种容器就能运用另一种类型。

 

知识点:

 

标准库定义了三种顺序容器类型:vectorlistdecque。其区别在于:vectordecque支持随机访问容器内容,list只能按序遍历;list支持任意位置的添加和删除,相当于C中的链,而vectordecque不行;decque相比于vector能够在头部进行插入和删除操作。

 

顺序容器的定义和初始化,容器初始化参数可以使迭代器,也可以是指针。

 

容器的元素必须满足两个条件:能够进行复制和赋值。因此引用类型不可以做为容器元素,容器类型可以,标准库类型也不可以。若在定义容器时指定大小,则必须进行初始化,这意味着该类型元素具有默认的构造函数,或者对其显示地初始化。

迭代器范围为左闭合区间。迭代器失效将带来巨大的灾难。

顺序容器的操作,包括添加、删除、设置大小等。

Listdecque具有push_front操作,vector没有。

添加元素可能导致容器的重新加载,因此会导致迭代器失效。因此在每次添加元素之后都应重新获取迭代器的值。

访问操作:c.backc.frontc[n]这些返回的都是指向元素的引用。

赋值与swap:用‘=’对容器进行赋值时两边的类型必须完全匹配,assign进行赋值时可以是相互兼容的类型(如char*string,但intdouble不可以)。Swap不交换迭代器,即原来指向哪个元素,交换之后还是指向那个元素,因此不会带来迭代器的失效。

 

容器采用动态内存管理,capacity成员函数获得当前能够存储的元素总数,reserve表示应该预留多少个元素空间(总共),注意capacitysize结果不一定相同,且每次reserve之后,capacity 的值都会改变。

 

String:

String类型支持顺序容器的大多数操作,包括capacityreserveString对象的操作不在赘述,需要用到时可以回头查找。

 

容器适配器,包括stack(栈)、queue(队列)和priority_queue(优先权队列)

必须包含相关头文件<stack><queue>

初始化如下:stack<int> stk(deq)deqdeque容器。默认的stackqueue都是基于deque实现的,priority_queue是基于vector实现的。讲一个顺序容器作为第二个实参类型进行初始化,可以覆盖其默认的容器类型。如stack<int,vector<int> > a

Stack 可以建立在三种容器之上,queue关联的容器必须支持push_front操作,因此不能是vectorpriority_queue要求提供随机访问功能,因此不能是list

Priority_queue允许设置元素优先级,之后的插入操作不是按顺序而是按照优先级的由大到小插入。

 



https://blog.sciencenet.cn/blog-691244-571764.html

上一篇:C++Primer学习笔记
收藏 IP: 210.77.9.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-3-29 22:37

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部