(九)顺序容器

因为容器是可增长的,所以可以推测数据区域是另外分配的,而容器自身大小是不变的,即数据区域和容器变量存储的位置不同.

vector,可变大小数组,支持快速随机访问,但在尾部之外位置插入删除元素很慢

deque,同vector,但是支持头部添加删除元素,在中间添加删除元素还是慢

list,双向链表,任意位置添加删除元素都很快,但是只可以遍历访问元素,不支持快速随机访问

forward_list,单项链表

array,固定大小数组,同数组,但更安全方便

string,同vector,但是专门用来存储字符,并提供一些字符处理函数.


新标准库的容器性能很高,不比最精心设计优化过的同类数据结构差,所以应该使用新标准库容器.


如果程序在读取输入时需要在中间插入元素,随后需要随机访问元素,那么可以将数据存储到vector中,然后调用sort函数

如果确实必须在中间插入元素,可以在输入阶段使用list,之后拷贝到vector中.


初始化一个容器,可以传递一个迭代器范围,不要求容器类型是相同的,因为通过迭代器就可以访问范围内的元素,也不要求元素类型相同,只要元素可以转换成对应类型即可.


array类型,大小是类型的一部分.


swap速度比赋值要快,因为本质上swap并不需要赋值对应元素,而是将对应数据结构地址交换即可.当然数组之类的是需要交换实际数据的.


赋值容器,是元素的完全拷贝,比较容器是进行元素的逐个比较,所以只有当元素定义类比较运算是才可以比较


插入或删除元素会使容器的迭代器失效.所以尽量不要修改容器大小,或者总是使用end而不是end的一个拷贝.加入元素是对被加入元素的一个拷贝.


emplace 是用参数直接构造元素,而不是拷贝元素,(所以应该要快?)

如果容器中没有元素,没有检测就使用,有可能访问不存在的元素,和数组下标越界类似.保证有效是程序员的责任.at会考虑越界问题并抛出out_of_range异常,删除元素也不会检测,如果对空元素或空容器 删除 pop 则是未定义的.


forward_list 由于结构原因,使用首前迭代器,删除的元素为指定元素之后的一个元素.ears_after(p)



一些常规下不能使用的限制,需要特殊处理

没有默认构造函数的类



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值