3. 容器之分类与各种测试

序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。   

        1.数组(Array)

                ①定义:array<T,N>表示可以存储 N 个 T 类型的元素。

                ②组成图示:

                ③注意:一旦建立,其长度就是固定不变的,这意味着不能增加或删除元素,只能改变某个元素的值。

        2.单端数组(Vector)

                ①定义:vector<T>用来存放 T 类型的元素,是一个长度可变的序列容器,即在存储空间不足时,会自动申请更多的内存。

                ②组成图示:

                ③注意:在尾部增加或删除元素的效率最高(时间复杂度为 O(1) 常数阶),在其它位置插入或删除元素效率较差(时间复杂度为 O(n) 线性阶,其中n为容器中元素的个数)。

        3.双端数组(Deque)

                ①定义:deque<T>和 vector相似,但限定插入和删除操作在数组的两端进行的容器。

                ②组成图示:

                ③注意:该容器不仅尾部插入和删除元素高效,在头部插入或删除元素也同样高效,时间复杂度都是 O(1) 常数阶,但是在容器中某一位置处插入或删除元素,时间复杂度为 O(n) 线性阶。

        4.链表(List)

                ①定义:list<T>是一个长度可变的由 T 类型元素组成的序列,一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的,由一系列存储数据元素的数据域和存储下一个结点地址的指针域的节点组成的双向循环链表。

                ②组成图示:

                ③注意:在这个序列的任何地方都可以高效地增加或删除元素(时间复杂度都为常数阶O(1)),但访问容器中任意元素的速度要比前三种容器慢,这是因为 list<T>必须从第一个元素或最后一个元素开始访问,需要沿着链表移动,直到到达想要的元素。

        5.正向链表(Forward_List)

                ①定义:与list 容器非常类似,只不过它以单链表的形式组织元素。

                ②组成图示:

                ③注意:它内部的元素只能从第一个元素开始访问,是一类比链表容器快、更节省内存的容器。

        6.单链表(Slist)

                ①定义:与Forward_List相同。

                ②组成图示:

                ③注意:slist和forward_list的不同之处在于其所在的库使用slist需要包含#include<ext\list>,而使用forward_list则需要包含#include<forward_list>。

        7.栈(Stack)

                ①定义:stack是一种先进后出的数据结构,它只有一个出口,栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为。

                ②组成图示:

                ③注意:stack<T> 本质上也属于序列容器,只不过它们都是在 deque 容器的基础上改头换面而成,通常更习惯称它们为容器适配器。

        8.队列(Queue)

                ①定义:queue是一种先进先出的数据结构,它有两个出口队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。

                ②组成图示:

                ③注意:queue<T> 本质上也属于序列容器,只不过它们都是在 deque 容器的基础上改头换面而成,通常更习惯称它们为容器适配器。

关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系。

        1.Set

                ①定义:所有唯一元素都会在插入时自动被排序的底层二叉树结构。

                ②组成图示:

                ③注意:set插入数据的同时会返回插入结果,表示插入是否成功 。

        2.Multiset

                ①定义:任何元素都会在插入时自动被排序的底层二叉树结构。

                ②组成图示:

                ③注意:set不可以插入重复数据,而multiset可以,set不可以插入重复数据,而multiset可以。

        3.无序哈希容器(Unordered_set)

                ①定义:不以键值对的形式存储数据,而是直接存储数据元素本身,该容器存储的元素不能重复,且容器内部存储的元素也是无序的。

                ②组成图示:

                ③注意:*可以理解为,该容器存储的全部都是键 key 和值 value 相等的键值对,正因为它们相等,因此只存储 value 即可。 *属于关联式容器,但由于哈希容器底层采用的是哈希表,而不是红黑树。

        4.无序哈希容器(Unordered_multiset)

                ①定义:和 unordered_set 唯一的区别在于,该容器允许存储值相同的元素。

                ②组成图示:

                ③注意:属于关联式容器,但由于哈希容器底层采用的是哈希表,而不是红黑树。

        5.Map

                ①定义:所有唯一元素都会根据元素的键值自动排序的底层二叉树结构。

                ②组成图示:

                ③注意:map中所有元素都是pair,pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)。

        6.Multimap

                ①定义:任何元素都会根据元素的键值自动排序的底层二叉树结构。

                ②组成图示:

                ③注意:map不允许容器中有重复key值元素,multimap允许容器中有重复key值元素。

        7.无序哈希容器(Unordered_map)

                ①定义:存储键值对 <key, value> 类型的元素,其中各个键值对键的值不允许重复,且该容器中存储的键值对是无序的。

                ②组成图示:

                ③注意:属于关联式容器,但由于哈希容器底层采用的是哈希表,而不是红黑树。

        8.无序哈希容器(Unordered_multimap)

                ①定义:和 unordered_map 唯一的区别在于,该容器允许存储多个键相同的键值对。

                ②组成图示:

                ③注意:属于关联式容器,但由于哈希容器底层采用的是哈希表,而不是红黑树。

各容器成员函数

        序列式容器

        关联式容器

        哈希容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值