STL之迭代器失效

STL

STL所有container都是sequence或associative container的model

三种序列【sequence】:
vector:快速随机访问【iterator易失效】
deque:高效率两段安插移除元素【iterator易失效】
list:双向链接链表【iterator不会失效】

vector:实现方式是把元素安排在连续的存储块中,iterators可以是一般指针。vector会管理其内存,从内存开头处构造元素。vector大小等于其容量,超过容量,需要重新分配一块新的更大的内存。内存重新分配时,其iterator失效!在vector中间插入删除元素,会使指向该插入点或删除点之后的元素的所有iterators失效!
deque:与vector不同,提供常量时间内于序列开头新增或移除元素。insert(包括push_back, push_front)都会使所有iterators失效,对中段调用erase也会使所有iterators失效。【deque远比vector复杂,迭代器累加动作至少多一次比较操作,所以比vector慢很多】
list:双向链表,有前驱和后继。重要性质:安插与结合(splicing)动作不会使指向list的iterator失效,删除只会使本身的iterator失效。

四种关联容器【associative container】:
set【元素一定会以递增顺序排序】【iterator不会失效】
map【iterator不会失效】
multiset【iterator不会失效】
multimap【iterator不会失效】

sequence的插入和删除
insert 【S.insert(p, x)操作:在p之前插入元素】【iterator的range是非对称的,可以在S.begin()之前做插入,也可以在S.end()尾端前做插入。
erase【S.erase(p)】移除并摧毁该元素。
vector, list, deque主要差异在于提供的iterator种类以及iterator的无效语义。

multiset < int, greater > //默认从小到大,现在改成从大到小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值