c++基础学习笔记18

容器:vector、deque、stack、queue、list、set、map
vector:
单端数组
与普通数组的区别:数组是静态空间,而vector可以动态扩展。
动态扩展:不断寻找更大的内存空间,然后将原数据拷贝新空间,释放原空间。一段空间是连续空间,支持随机访问。
常用操作:front、back、push_back、pop_back、begin、end、insert、assign、empty、capacity、size、resize、erase、clear、at、[ ]、swap、 reserve
deque:
双端数组
与vector区别:vector头部插入删除效率低,deque相对就快
vector访问元素的速度比deque快,跟内部结构有关。
deque内部有中控器,维护每段缓冲区的内容,缓冲区中存放真实数据,中控器维护的是每个缓冲区的地址,像一片连续空间。
常用操作:front、back、push_front、push_back、pop_front、pop_back、begin、end、insert、assign、empty、capacity、size、resize、erase、clear、at、[ ]、swap、 reserve、 sort
stack:
栈容器,先进后出,不允许遍历。
常用操作:push、pop、top、empty、size
queue:
先进先出,队列不允许遍历行为
常用操作:push、pop、back、front、empty、size
list:
链式存储
链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。
链表组成:由一系列结点组成
结点的组成:一个存储数据元素的数据域,另一个 存储下一个结点地址的指针域。
优点:可以对任意位置快速插入或删除元素
缺点:容器遍历速度没有数组快,占用空间比数组大。
list优点:动态存储分配,不会造成内存浪费和溢出。链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素。
list缺点:链表灵活,但空间(指针域)和时间(遍历)额外耗费较大。
list插入和删除操作不会造成原有list迭代器失效。
常用操作:assign、swap、size、empty、resize、push_front、push_back、pop_front、pop_back、insert、erase、remove、clear、begin、end、front、back、reverse、sort、
不可以用[]、at方式访问元素,因为list是链表,不是连续线性空间存储数据,迭代器也是不支持随机访问
set:
所有元素都会在插入时自动被排序,set/multiset属于关联式容器,底层结构是二叉树实现。
set/multiset区别:
set不允许容器内有重复的元素,而multiset允许。
插入数据只有insert方式
常用操作:size、empty、swap、insert、clear、erase、find、count
map:
map中所有元素都是pair(对组,成对出现)
pair中第一个元素为key,起到索引作用,第二个元素为value(实值)。
所有元素会根据元素的键值自动排序
map/multimap属于关联式容器,底层结构是用二叉树实现。
优点:
可以根据key值快速找到value值
map和multimap区别:
map不允许容器内有重复的key,而multimap允许。
常用操作:size、empty、swap、insert、clear、erase、find、count
插入前,可以利用仿函数改变排序规则。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值