随笔分类 - STL
摘要:1.emplace() 函数和 emplace_back() 函数 C++11的STL中新增加了emplace() 函数和 emplace_back() 函数,用来实现insert() 函数和 push_back() 函数的功能。 如果容器中的元素是对象: emplace() 函数的功能是可以直接将
阅读全文
摘要:STL源码剖析 迭代器失效小结 STL源码剖析 迭代器失效小结 有的朋友肯定会问, m.erase(it++);就不会产生迭代器失效么? 确实不会! 为什么呢? 这样从it++说起, 为了简便起见, 我们用p++来代替吧。 看程序: #include <iostream> using namespa
阅读全文
摘要:layout: post title: 侯捷STL学习(12) date: 2017 08 01 tag: 侯捷STL 第四讲 STL相关的内容 Hash Function 将hash函数封装成类对象 hash_val进行拆解传入参数,进行循环 每次拆解一个参数,都需要更新种子 TR1的工具,)0x
阅读全文
摘要:layout: post title: 侯捷STL学习(十一) date: 2017 07 24 tag: 侯捷STL 第三讲 标准库内核分析 算法 标准库算法形式 iterator分类 不同容器iterator类型不同 测试iterator类型 istream_iterator,ostream_i
阅读全文
摘要:layout: post title: 侯捷STL学习(十) date: 2017 07 23 tag: 侯捷STL 第二十三节 容器hashtable探索 hashtable冲突(碰撞)处理 rehash时,篮子扩充两倍,找到其附近的质数,重新计算元素位置 内部扩充的数据已经预定好,53 97 .
阅读全文
摘要:layout: post title: 侯捷STL学习(九) date: 2017 07 21 tag: 侯捷STL 第十九节 容器rb_tree Red Black tree是自平衡二叉搜索树。 rb_tree的封装 清楚传入模板的参数列表;然后构建了一个虚空结点header KeyOfValue
阅读全文
摘要:layout: post title: 侯捷STL学习(八) date: 2017 07 19 tag: 侯捷STL 第十八节 深度探索deque上 内存结构 分段连续,用户看起来是连续的 迭代器为了维持连续的状态,每次++, 都需要判断当前buffer是否用完,若用完则需要通过控制中心跳到下一个b
阅读全文
摘要:layout: post title: 侯捷STL学习(七) date: 2017 06 13 tag: 侯捷STL 第十六节 深度探索vector 源码剖析 内存2倍扩充,是在另外的地方重新申请内存,将数据搬过去 前闭后开区间 2倍扩充方法,reallocation 函数中再次判断,原因是可能有其
阅读全文
摘要:第十三,四节 深度探索list(上,下) 源代码实现 注意 代码和图示的位置 实现前闭后开,增加一个空白节点 用的分配器alloc 智能指针,需要知道结点node的next指针 除了array和vector,其他容器的iterator都是一个class class 实现 必须做至少5个 ,很多操作符
阅读全文
摘要:第十一节 分配器 "STL源码学习 内存管理" 分配器的好坏影响到容器的性能 里面调用 vc下的源代码路径 分配的内存要比申请的内存大 所以VC6.0下的allocator没有优化 主要的两个操作是: 和`deallocate operator new operator delete`。 没必要自己
阅读全文
摘要:C++标准库第二讲 体系结构与内核分析 第1 7节为第一讲 读源代码前的准备 第八节:源代码分布 C++基本语法 模板的使用 数据结构和算法 本课程主要使用: 与`Gun C 4.9` VS2013中源代码的地址 第九节:OOP(面向对编程) VS GP(泛型编程) OOP将数据data和方法met
阅读全文
摘要:第七节:分配器测试 标准的分配器 ,` include`都是拓展的 可以用不同的分配器测试同一容器 分配器 进行内存的分配和释放,这样操作太麻烦了 实际用到得 释放时并没有指定分配产生的字节 关于分配器实现需要后续的源码分析 测试
阅读全文
摘要:第六节:容器之分类和各种测试(四) 不提供 操作,破坏了容器的独特性,先进先出。 使用容器multiset(允许元素重复) 内部是红黑树, 操作就保证了排好了序。 标准库有个 函数,大家都可以用。容器本身也有一个 ,通过键值对查找非常快! 测试 使用容器multimap(允许元素重复) 内部是红黑树
阅读全文
摘要:开始跟着《STL源码剖析》的作者侯捷真人视频,学习STL,了解STL背后的真实故事! 视频链接: "侯捷STL" 还有很大其他视频需要的留言 第一节:STL版本和重要资源 STL和标准库的区别 三个网站 "CPlusPlus" "CppReference" "gcc.gnu.org" "Boost"
阅读全文
摘要:容器类 STL Container Header Applications vector <vector> 直接访问任意元素,快速插入、删除尾部元素 deque <deque> 直接访问任意元素,快速插入、删除头部和尾部元素 list <list> 快速插入、删除任意位置元素 set <set> 快
阅读全文
摘要:STL是C++重要的组件之一,大学时看过《STL源码剖析》这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :) 1、STL概述 STL提供六大组件,彼此可以组合套用: 容器(Containers):各种数据结构,如:vector、list、deque、set、map。用来
阅读全文
摘要:stl提供了三个最基本的容器:vector,list,deque。 vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此 它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间 进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不
阅读全文
摘要:高效使用STL 参考:http://blog.jobbole.com/99115/ 仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍;熟悉以下条款,高效的使用STL; 当对象很大时,建立指针的容器而不是对象的容器 1)STL基于拷贝的方式的来工作,任何需要放入STL中的元素,都会被复制;这也
阅读全文
摘要:一、简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。 用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法
阅读全文
摘要:map介绍 Map是STL[1]的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一
阅读全文