C++学习17:容器、分配器初步理解

有关STL的基础内容详见:C++学习16:STL体系结构和基础介绍

1 容器及其分类

在这里插入图片描述
容器分为顺序容器和关联容器。
一、顺序容器:按顺序存入数据,通常用的操作是push_back()。
1、Array:大小是固定的,无法扩充;
2、Vector:空间不够时,后面可以(通过分配器)自动扩充,扩充方式是两倍扩充;
3、Deque:空间不够时,前后都可以扩充,但计数时不太方便;
4、List:链表,用双向指针串起来的容器,底层是环形的;
5、Forward-List:单向链表,不如List方便,但省下很多指针占据的空间。
二、关联容器:存键值对(key and value)以便于大量查找,不提供迭代器,通常用的操作是insert()。
1、Set:key和value是不分的,key即value;
2、Map:存key和value,通过key找value,写代码时多用pair操作。
前缀:
1、Unordered:用hash table做的容器(有一个basket,每一个basket后面带着一串链表,每新来一个元素就要计算一下放在哪个basket,尽量避免“碰撞”。)。特点是不定序,即没有定性的排列;而没有Unordered内部用的不是hash table,而多数用红黑树实现。
2、Multi表示key可以重复,没有Multi表示key不可重复,要根据不同的情况进行选择是否用Multi。
在这里插入图片描述

2 容器适配器

有栈stack和队列queue,这两个都是由deque进行一系列操作得到的。操作主要是push()和pop()。
在这里插入图片描述
在这里插入图片描述

3 容器分配器

分配器allocator完成给容器分配内存的工作,只用于容器。如果不处理分配器,每个容器也都会有默认的分配器。影响到速度和空间的运营。
如果要自己写分配器,不是在std中,而是在__gnu_cxx中,可以在ext库中处理,但没有必要也不建议自己制作分配器,而是使用容器。
基础:operator new() 和 malloc(),而operator new()最终也会调用malloc()。
1、分配的内存的样子:蓝色部分才是真正占据的内存,而还有很多附加的东西,这些东西不论开辟了多少,都会增加这些。其中,红色的是cokkie,记录了真正用的大小,自身消耗8个字节;
在这里插入图片描述
2、allocator的实现:
allocator只是以::operator new()和::operator delete()完成allocate()和deallocate(),底层就是malloc和free。
在这里插入图片描述
注:一个类型后面直接加个圆括号:创建一个临时对象。如:allocator<int>()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值