STL容器

1、顺序容器

vector:底层实现是数组。

分配内存的方式:

       当定义vector的适合不分配内存,第一次插入元素分配一个单元的内存空间,之后每当分配的空间用完之后则进行扩容,扩容的倍数根据编译器而定。注意vector的扩容是重新开辟一块空间将原来的元素存入,而不是在原来的空间后边补充。

       缩容则和扩容相反,同样是重新申请空间。

迭代器的失效:

       注意vector的扩容、缩容方式,每次插入、删除元素之后都有可能导致扩容或者缩容,而扩容缩容后迭代器指向的还是旧的内存空间,这样就相当于一个野指针,因此在插入、删除元素之后会导致迭代器失效。

基本操作:

  • front() 返回头部引用
  • back() 返回尾部引用
  • size() 返回元素个数
  • push_back() 尾部插入
  • pop_back() 尾部移除
  • insert() 插入元素,可以从指定位置插入

list:底层实现是链表

迭代器失效:

  • 插入元素时迭代器不失效
  • 删除元素时迭代器失效

基本操作:

  • push_back() 尾部插入元素
  • pop_back() 尾部删除元素
  • insert() 从指定位置插入元素
  • front() 返回第一个元素的引用
  • back() 返回最后一个元素的引用

deque:双端队列

        deque和vector十分类似,它采用动态数组管理元素,提供随机存取,有着和vector几乎一样的接口。不同的是deque的动态数组头尾都开放,因此可以在头尾两端进行快速的插入和删除。

deque的底层数据结构:

       deque底层是一个中央控制器和多个缓冲区。stl使用一个map(不是stl中的map)作为中央控制器,这个map就是一小块连续的空间,map中每一个元素都是一个指针,指向一个更大的缓冲区,数据元素都存储在缓冲区中。

迭代器失效:

      对于deque进行插入和删除操作都会使得迭代器失效

基本操作:

deque支持从头部插入元素,其他操作和vector差不多

2、关联容器

       map、multimap:是键值对(key/value)容器,map和multimap的差别仅仅是map的一个键只能对应一个值,而multimap中一个键可以对应多个值。迭代器可以修改map、multimap的value值,而不能修改其键。map会根据键值key自动排序。

迭代器失效:

  • 插入元素迭代器不失效
  • 删除元素迭代器失效

底层数据结构:

红黑树

       set、multiset:集合

set:集合,默认进行排序,底层是红黑树,插入效率是log2n。value值不允许修改、不允许重复。

multiset:多重集合,value允许重复。

迭代器失效:

  • 插入元素迭代器不失效
  • 删除元素迭代器失效

底层数据结构:
红黑树

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值