STL(2)

liviayu / 2023-09-04 / 原文

目录
  • 容器的分类
  • array测试程序
  • vector测试程序
  • deque原理
  • stack和queue
  • multiset
  • multimap
  • unordered_set

容器的分类

  1. 序列式 sequence container

array 固定长度

vector 能在后部插入元素

deque 两边都能插入元素,但是技术上不易描述

list 双向链表

forward-list 单向链表

  1. 关联式 associative container

实现一个快速的查找
set/multiset map/multimap 底部使用红黑树(高度平衡,自动平衡)

set和map的差别,map每一个结点有key value,而set中key就是value

multi和non-multi的区别,multi表示key可以重复,没multi表示key无法重复
例如,存储学生信息用身份证号当主键可以使用map

  1. 无序容器 unordered container C++11

unordered_set unordered_map multiset multimap

底层使用hashtable,hash碰撞时使用链表的做法(公认是效率较高的解决办法

array测试程序

  • .data()函数
    写下array的首地址

vector测试程序

  • find()返回iterator类型,用*来取值,是循序查找,遍历数组

  • .capacity() 获得当前容量,由于vector容量的开辟时*2的类型的,所以会有一个capacity

deque原理

stack和queue

因为容器的访问特性,fifo
不提供一个iterator来遍历这个容器,避免对容器访问的破坏

multiset

红黑树的底层实现使得容器自己的查找比全局的查找要快很多

multimap

和上述的类似,区别在于取键值对

unordered_set

带unordered的底层实现是使用hashtable