美文网首页C++STL
面试知识点(5)STL

面试知识点(5)STL

作者: 微糖去冰_ | 来源:发表于2019-08-29 17:06 被阅读0次

容器类型

STL容器主要分为

顺序容器 vector(向量容器) deque(双端队列容器) list(双向链表)
关联容器 set(单重集合) multiset(双重集合) map(单重映射表) multimap(多重映射表) unordered_map unordered_set
容器适配器 stack(栈) queue(队列) prority_queue(优先级队列)

连续内存的容器:这种类型容器包含vector、deque。特点是在一块连续的内存块上存放数据,所以有数据插入和删除的时候,如果不是在序列的 或者两端那么花费的代价是非常大的,因为需要保证连续内存,同时给新元素腾出空间或者填充删除元素的空间,如果存储的是复杂结构的话就要花费大量的时间进行拷贝操作(可以存储复杂结构的指针来弥补这个缺陷,这个讨论在另个总结中进行)。

基于节点的容器:这类容器是剩余的几个list、set、multiset、map、multimap.这类容器中的数据是分别存储在不同的内存块中,可能连续也可能不连续(一般不认为是连续的),这样的容器在插入删除元素的时候修改的只是节点的指针,这样的消耗是非常小的。

需要大量添加新元素:

vector在大量添加元素的时候问题最大,因为他的一种最常见的内存分配实现方法是当前的容量(capacity)不足就申请一块当前容量2倍的新内存空间,然后将所有的老元素全部拷贝到新内存中,添加大量元素的时候的花费的惊人的大。如果由于其他因素必须使用vector,并且还需要大量添加新元素,那么可以使用成员函数reserve来事先分配内存,这样可以减少很多不必要的消耗。

list对这种情况的适应能力就非常好,都是常数时间的插入消耗。deque前面说过了,他是vector和list的折衷形式,内存不够了就申请一块新的内存,但并不拷贝老的元素。

查找速度对于序列容器需要区分依据是元素是否排序

1)对于已经排序的序列容器,使用binary_search、lower_bound、upper_bound、equal_range可以获得对数时间复杂度的查找速度(O(logN));
2)而未排序的序列容器二分查找肯定是用不了,最好的时间复杂度是线性的(O(n))

对于关联容器,存储的时候存储的是一棵红黑树(一种更为严格的平衡二叉树,文档最后有介绍),总是能达到对数时间复杂度(O(logN))的效率,因为关联容器是按照键值排好序的。

元素的排序:

默认情况下序列容器中的元素是无序的,而关联容器中的元素是有序的。

内存是否和C兼容:

适合的容器只有一个vector,意思就是如果需要把容器中的数据放到C类型的数组中那么不需要做多余复杂的操作,如果有vector v,只需要直接使用&v[0]就可以得到v中第一个元素的指针,因为vector和C数组的内存布局是一样的,这个要求同时也是标准C++委员会制定的标准。所以能保证有这样特性的容器只有vector,那么vector以外的其他STL容器中的数据如果需要变换成C数组形式,或者C数组放到其他类型容器中,可以把vector作为一个桥梁,下面给个例子:

相关文章

  • 面试知识点(5)STL

    容器类型 STL容器主要分为 顺序容器 vector(向量容器) deque(双端队列容器) list(双向链...

  • c++那些事儿11.0 STL--List

    首先对STL不熟悉的同学,可以先看看这篇文章里有些东西: STL中容器相关知识点 知识点综述: List:序列式容...

  • The C++ standard library(侯捷/孟岩 译

    5. STL Components(page73) 5.1 STL组件 STL基本观念:将数据和操作分离。数据由容...

  • 一些面试题记录

    STL1、对STL有哪些了解2、STL中的内存管理3、什么是函数对象,用在哪些情况4、用过哪些STL算法5、基本容...

  • 求职准备

    1:知识点总结 2:项目总结 3:常见面试问题总结 4:公司筛选 5:安排面试行程 6:面试!!!

  • 面试题汇总:Hive

    1.《大数据Hive 面试以及知识点》 2.《Hive学习之路 (十一)Hive的5个面试题》 3.《大数据工程师...

  • stl简介

    stl stl简介 1. 什么是STL? STL(Standard Template Library),封装基本数...

  • C++ 教程 | 菜鸟教程

    重新系统学习下C++;但是还是少了好多知识点;socket;unix;stl;boost等; C++ 教程 | 菜...

  • 再出发-机器学习

    机器学习: 知识点链接: 面试必备 | 机器学习、深度学习面试知识点汇总[https://mp.weixin.qq...

  • Java容器(List、Set、Map)知识点快速复习手册

    前言 本文快速回顾了Java中容器的知识点,用作面试复习,事半功倍。 其它知识点复习手册 Java基础知识点面试手...

网友评论

    本文标题:面试知识点(5)STL

    本文链接:https://www.haomeiwen.com/subject/oxpbectx.html