容器与迭代器

vector , stack, queue, map, set都是 stl提供的标准数据结构,他们共同的特点是都是容器,用来存储元素集合。为了统一他们的使用方法, stl提供了迭代器。

容器

迭代器功能

解释

vector

随机访问

deque

随机访问

双端队列,可以从前后 push,pop 元素

list

双向

链表

set/multiset

双向

multiset 是允许有重复元素的 set ,元素保持有序

map/multimap

双向

multimap 是允许有重复元素的 map ,元素是 pair 保持有序

stack

不支持迭代器

queuequeue

不支持迭代器

队列

priority_queue

不支持迭代器

优先队列,每次可以从栈顶取出当前最小

容器

添加元素的效率

删除元素的效率

查找元素

访问中间的元素

vector

加在尾部 O(1)O(1) ,加在中间 O(n)O(n) 。

O(n)O(n)

O(n)O(n)

O(1)O(1)

list

O(1)O(1) ​

O(1)O(1)

O(n)O(n)

O(n)O(n)

stack

只能加在栈顶 O(1)O(1)

只能删除栈顶 O(1)O(1)

无法查找

无法访问

queue

只能加在队尾 O(1)O(1)

只能删除队首 O(1)O(1)

无法查找

无法访问

set/map

O(log(n))O(log(n))

O(log(n))O(log(n))

O(log(n))O(log(n))

O(n)O(n) 更高效率的访问需要自己实现

迭代器

容器方法

解释

begin()

返回容器首个元素的地址

end()

返回容器最后一个元素再下一个元素的地址

rbegin()

返回容器最后一个元素的地址

rend()

返回容器首个元素再前一个元素的地址

find(value)

查找元素,如果找到返回迭代器位置,否则返回 end() 的位置

erase(iterator)

删除迭代器元素

常用操作

begin(),               //返回set容器的第一个元素

end(),                 //返回set容器的最后一个元素

clear(),               //删除set容器中的所有的元素

empty(),               //判断set容器是否为空

max_size(),            //返回set容器可能包含的元素最大个数

size(),                //返回当前set容器中的元素个数

rbegin(),              //返回的值和end()相同

rend(),                //返回的值和begin()相同

erase(iterator),       //删除定位器iterator指向的值

erase(first,second),   //删除定位器first和second之间的值

erase(key_value),      //删除键值key_value的值

find() ,              //返回给定值值得定位器,如果没找到则返回end()。

set中还有两个非常重要的函数,lower_bound()和upper_bound()。这两个函数都需要传入一个值。

lower_bound返回的是大于或等于被查询元素的第一个元素位置的迭代器,如果找不到,迭代器则为set.end() 。

upper_bound返回值则是>给定val的最小指针(iterator)。

rbegin() 和 rend()为反向迭代器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值