STL容器

作者: Catcher07 | 来源:发表于2018-07-08 20:25 被阅读0次

STL容器类型

  • 序列式容器
    vector,list(双向链表),deque,stack,queue,heap,priority_queue,slist(单向链表)。
  • 关联容器:set,map,multiset,multimap,hashtable,hash_set,hash_map,hash_multiset,hash_multimap。

STL内存分配器

  • allocate:内存分配,仅分配内存,不构造对象。
  • deallocate:内存释放, 仅释放内存,不析构对象。
  • construct:在已分配的内存空间中构造对象,仅构造对象。不分配内存。
  • destroy:在已分配的内存空间中析构已构造的对象,仅析构对象,不释放内存。
  • 调用顺序:allocate->construct->destroy->deallocate。

STL 序列式容器

vector

vector是一种动态的数组的结构,在内存中具有连续的存储空间,支持随机访问。vector是动态的空间,随着元素的加入,它的内部的机制会自行扩充空间以容纳新的元素。

使用vector时的注意点

  • vector支持随机存取。
  • 在末端的插入和删除的操作性能很好,但是在前端或中部安插或删除元素,性能就不行了,因为操作点之后的每一个元素都必须向后移动,而每一次移动都得调用assignment(赋值)操作符。
  • 不适合的vector大小会引起内存的重新的分配。
    1. 一旦内存重新配置,vector元素相关的所有references,pointers,iterators都会失效。
    2. 内存重新配置很耗时间。
  • 发生以下情况会使vector迭代器失效
    1. 使用者在一个较小索引位置上安插或移除元素。
    2. 由于容量变化而引起重新分配

解释:安插和移除元素,都会使“作用点”之后的各元素的references,pointers,iterators失效,如果安插操作甚至引发内存重新分配,那么该容器身上的所有元素references,pointers,iterators都会失效。

面试问题

  1. 频繁对vector调用push_back()对性能的影响和原因?
    频繁的调用push_back(),当vector数据结构中的迭代器finish(目前使用的空间的尾)与end_of_storage(目前可用的空间的尾)相等时,会引发空间的重新配置。
  2. vector重新分配内存的大小与方式?
    重新的空间的分配并不是在原空间的之后接续新空间,而是以2倍的大小另外配置新的空间,然后将原有的内容拷贝过来,然后才开始在新的内容之后构造新的元素,并释放原空间。因此,对vector的任何操作,一旦引起了空间的分配,指向原vector的所有的迭代器就都失效了。

相关文章

  • C++标准库结构与使用

    本文预览: 标准库和STL STL的六大组件 STL容器分类 STL容器使用 标准库和STL ** 我们在写C++...

  • [C++] STL 容器

    参考:[C++] STL 容器 (一) - 基本介紹[C++] STL 容器 (二) - Iterator 部分示例:

  • GeekBand C++第五周

    STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。 标准STL顺序容器:vector、deque...

  • STL容器

    STL容器迭代器 STL容器迭代器失效情况分析、总结[https://ivanzz1001.github.io/r...

  • 2019-10-13 STL模板

    STL共有六大组件 1、容器 2、算法 3、迭代器 4、仿函数 6、适配器 STL容器的实现原理 STL来管理数据...

  • C++ STL是什么

    STL 组件主要包括容器,迭代器、算法和仿函数。STL 基本结构和 STL 组件对应。 STL 主要由迭代器、算法...

  • STL概论与版本简介

    1 STL概论与版本简介 1.1 STL概述 STL提供六大组件,彼此可以组合套用: 容器(Containers)...

  • 面试知识点(5)STL

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

  • 五、STL容器共性机制(解释二的疑问)、STL容器使用时机

    1.STL容器共性机制 STL容器所提供的都是值(value)寓意,而非引用(reference)寓意,也就是说当...

  • (Boolan) STL与泛型编程第四周笔记(上)

    1 STL组建(STL Components) 关键组建:容器,迭代器,算法 STL的基本观念就是将数据和操作分离...

网友评论

      本文标题:STL容器

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