STL
文章平均质量分 92
practicePLUS
你的目标到底是什么
展开
-
STL之list
list的设计list由三部分构成:list节点、list迭代器、list本身特点:每次插入或删除一个元素,就配置或释放一个空间。对空间的运用不浪费对于任何位置的元素插入或元素移除,list永远是常数时间list节点list是一个双向链表,所以其list结点中有前后两个指针,当然还有值。如下://组成list的结点template<typename T>s...原创 2018-08-11 20:25:37 · 171 阅读 · 0 评论 -
STL之(底层哈希表)hash_set、hash_multiset、hash_map,hash_multimap
hash_set与hash_multiset:实值就是键值以hashtable为底层机制,所以几乎所有的hash_set行为,都是转调hashtable的操作行为。 与set、multiset相比,hash_set、hash_multiset没有自动排序功能。 hash_set与set一样,实值就是键值。使用方式与set完全相同插入元素操作采用底层机制hashtable...原创 2018-08-12 16:20:07 · 569 阅读 · 0 评论 -
STL之(哈希表)hashtable
容器hashtable(哈希表):另外一种底层机制其基本原理是:使用一个下标范围比较大的数组来存储元素。把关键字Key通过一个固定的算法函数即所谓的哈希函数(散列函数)转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的list空间里。也可以简单的理解为,按照关键字key为每一个元素“分类”,然后将这个元素存储在相应“类”所对应的地...原创 2018-08-12 16:07:30 · 5492 阅读 · 0 评论 -
STL之(底层红黑树)set、multiset、map、multimap
set、multset容器set/multiset是以rb_tree为底层机构,因此有元素自动排序的特性。 排序的依据是key,而set/multiset的value和key合一:value就是key,其中value由key和data组成。 set/multiset提供遍历操作和迭代器,按正常规则(++iter)遍历,便能获得排序状态(sorted) 我们无法使用set/multiset...原创 2018-08-12 15:55:54 · 4377 阅读 · 0 评论 -
STL之关联式容器----红黑树
标准STL关联式容器分为set(集合)和map(映射表)两大类以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表),这些容器的底层机制均以RB-tree红黑树完成。它也是一个独立容器,但不开放给外界用 不在标准规格之列的关联式容器hash table(散列表/哈希表),和以hash table为底层机制的hash_set(散列集合)、hash_map(散列...转载 2018-08-12 10:13:45 · 750 阅读 · 0 评论 -
STL之stack、queue、priority_queue
栈的底层结构:以缺省情况下的deque作为其底层容器(封闭底端出口和入口,利用deque的成员函数完成stack成员函数的定义),list也可以作为其底层容器一种先进后出的数据结构,只能在最顶端新增、移除、取出元素。即不能遍历,所以stack没有迭代器 队列的底层结构:以缺省情况下的deque作为其底层容器(封闭deque的底端出口和顶端入口,利用deque的成员函...原创 2018-08-12 09:09:33 · 315 阅读 · 0 评论 -
STL面试题
1、说说std::vector的底层(存储)机制。(如何实现vector)vector维护的是一个连续线性空间(动态数组),它以两个迭代器start和finish分别指向配置得来的连续空间中目前已被使用的范围(注意finish指向的是最后一个元素后面那个元素)并以迭代器end_of_storage指向整块连续空间(含备用空间)的尾端。 当我们以push_back()将新元素插入于vec...转载 2018-08-11 22:34:30 · 484 阅读 · 0 评论 -
STL容器迭代器失效情况分析、总结
当使用一个容器的insert或者erase函数通过迭代器插入或删除元素"可能"会导致迭代器失效,因此我们为了避免危险,应该获取insert或者erase返回的迭代器,以便用重新获取的新的有效的迭代器进行正确的操作 iter=vec.insert(iter);iter=vec.erase(iter); 迭代器失效的类型: 1.由于插入元素,使得容器元素整体“迁移”导致存放原容器元素...原创 2018-08-11 22:27:42 · 9330 阅读 · 3 评论 -
STL之deque
deque的底层实现vector是单向开口的连续线性空间,deque则是一种双向开口的由一段一段的定量连续空间组成,即可以在头尾两端分别做元素的插入和删除操作。一旦有必要在deque的前端或尾端增加新空间,便配置一段定量连续空间而我们也知道vector的头部操作效率非常差。 deque采用一块map(不是STL中的map)作为主控。这里的map是一小块连续空间,其中每个元素(此处称为...原创 2018-08-11 22:05:19 · 547 阅读 · 0 评论 -
STL之vector
容器、结构与分类 容器 :所有的容器都维护着两个迭代器,分别指向头和尾STL容器是将运用最广的数据结构实现出来根据数据在容器中的排列特性,将这些数据结构分为序列式和关联式两种序列式容器(advlsqp)array\deque\vector\list\queue\priority-queueArray连续空间,其迭代器就是指针。 VectorVector&l...原创 2018-08-12 16:31:22 · 585 阅读 · 0 评论