面试题集锦----容器

面试中常提到对几个容器的考察,包括vector、deque、list、map、set等,下面就对比说明这几个容器的区别和联系。

 

一、vector和list的区别

1、vector方便随机存取,list高效插入、删除。vector是一段连续的内存,所以在随机存取时拥有较高的效率,但是插入和删除时很耗资源;list是由双向链表实现,是不连续的内存,因此跟vector正好相反。

2、正如上面所说,vector是单向的,而list是双向的。

3、当容量不足时,vector会主动开辟内存(一般是2倍),list需要手动申请。

参考vector的内存处理过程,我们在扩充内存时也应该遵守

(1)申请一块较大的内存空间

(2)将旧数据移至新的内存空间

(3)释放旧内存空间。

 

二、vector和deque的区别

deque和vector非常相似,既可以快速的随机存取,又能快速的插入删除。deque由两级组成,第一级跟vector相同,第二级指向容器的首尾。

(1)vector不支持快速的随机存储,而deque能够快速的插入和删除

(2)vector的内存是连续,deque的内存是不连续的,并且占用的内存远大于vector

(3)在对内存扩展时,deque优于vector,因为内部结构显示,deque不必在内存重分配时复制所有的元素

(4)deque的内存会自动释放,并且会自动缩小内存的大小。

 

三、map和set区别

(1)map的节点是一对数据,而set的节点是单个数据

(2)set是经过排序的,所以值是不重复的;而map(key-value形式)的key不能重复

 

 

 

 

 

 

 

转载请标明出处

posted @ 2017-08-07 23:18  Qt王二狗  阅读(357)  评论(0)    收藏  举报