说一说STL 中常见容器的实现原理
vector、deque、stack、queue、list、set、map
标准回答
vector
vector 是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问,由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。
deque
deque 是一种双向开口的连续线性空间,元素在内存连续存放,随机存取任何元素都在常数时间完成,在两端增删元素具有较佳的性能。
stack
stack 是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。stack 容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取 stack 的其他元素,stack 不允许有遍历行为。
queue
queue 是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口,queue 容器允许从一端新增元素,从另一端移除元素。
list
list 内部实现的是一个双向链表,元素在内存不连续存放,在任何位置增删元素都能在常数时间完成,不支持随机存取。
mapmap内部自建一棵红黑树(一种自平衡二叉树),这棵树具有数据自动排序的功能,所以在map内部所有的数据都是有序的,以二叉树的形式进行组织。
set
set 底层使用红黑树实现,插入删除操作时仅仅移动指针即可,不涉及内存的移动和拷贝,所以效率比较高。set 中的元素都是唯一的,而且默认情况下会对元素进行升序排列。不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,再插入新元素。不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取。
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
得分点
vector、deque、stack、queue、list、set、map
参考答案
标准回答
vector
vector 是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问,由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。
deque
deque 是一种双向开口的连续线性空间,元素在内存连续存放,随机存取任何元素都在常数时间完成,在两端增删元素具有较佳的性能。
stack
stack 是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。stack 容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取 stack 的其他元素,stack 不允许有遍历行为。
queue
queue 是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口,queue 容器允许从一端新增元素,从另一端移除元素。
list
list 内部实现的是一个双向链表,元素在内存不连续存放,在任何位置增删元素都能在常数时间完成,不支持随机存取。
map
map内部自建一棵红黑树(一种自平衡二叉树),这棵树具有数据自动排序的功能,所以在map内部所有的数据都是有序的,以二叉树的形式进行组织。
set
set 底层使用红黑树实现,插入删除操作时仅仅移动指针即可,不涉及内存的移动和拷贝,所以效率比较高。set 中的元素都是唯一的,而且默认情况下会对元素进行升序排列。不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,再插入新元素。不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取。