
C++
文章平均质量分 78
iotflh
不忘初心,方得始终
初心易得,始终难守
展开
-
STL源码剖析(五)——关联式容器
1、概览所谓关联式容器,观念上类似于关联式数据库,每笔数据都有一个键值(key)和实值(value),当元素被插入到关联式容器中,容器内部结构(可能是红黑树和哈希表)便依照键值大小,以某种特定规则将这个元素放置在适当位置,关联式容器没有所谓头尾(只有最大元素和最小元素)。1.1、树由节点(nodes)和边(edges)组成,最上方的是根节点(root),每个节点具有方向性的边(diercted edges),用来和其他节点相连。无子节点的称为叶节点,如果最多允许存在两个子节点,即所谓二叉树(binar原创 2021-03-16 20:20:32 · 273 阅读 · 0 评论 -
《STL源码剖析》(四)——序列式容器
1、序列式容器所谓序列式容器,其中的元素都可序,但未必有序,C++本身提供了一个序列式容器array,STL另外提供了vector、list、deque、stack、queue、priority-queue等序列式容器,其中stack和queue由于只是将deque改头换面,技术上归类为一种配接器(adapater)。2、vector2.1vecor的数据结构数组2.2vector和array的区别1、vector是动态空间,随着元素增加,它的内部机制会自行扩充以容纳新的元素。2、array是原创 2021-03-14 21:33:31 · 329 阅读 · 0 评论 -
C++(八)——typename用法
1、typename来源1.1原因1:从表面上看,下面模板的参数只支持用户自定义类型,但其实对语言内置类型或者指针调用也支持:template <class T>int compare(const T &v1, const T &v2){ if (v1 < v2) return -1; if (v2 < v1) return 1; return 0;}//用指针调用:int v1=1 ,v2=2;int ret= cmpare原创 2021-03-14 16:01:24 · 20218 阅读 · 3 评论 -
《STL源码剖析》(三)——迭代器与traits编程
1、迭代器STL编程中,容器和算法相互独立,容器里面是数据,算法提供对数据的操作,在算法操作的过程中,要用到迭代器,迭代器可以看作是容器和算法的桥梁。2、迭代器设计模式在设计模式中,有专门的迭代器模式。描述如下:一种能够顺序访问问题中每个元素的方法,使用该方法不能暴露内部的表达方式。在STL编程结构中,迭代器是一种模板class,迭代器在STL中得到广泛的应用,通过迭代器,容器和算法可以有机的绑定在一起,只要对算法给予不同的迭代器,比如vectot::iterator、list::iterator原创 2021-03-14 10:42:04 · 251 阅读 · 0 评论 -
《STL源码剖析》(二)——空间配置器
一、 为什么要有空间配置器:1、小块内存带来的内存碎片问题单从内存分配的角度来讲,由于频繁分配、释放小块内存容易在堆中造成外碎片(极端情况下:堆中空闲的总量满足一个要求,但是这些空闲的块都不连续,导致任何一个单独的空闲的块都无法满足请求)2、小块内存频繁申请释放带来的性能问题:(1)开辟空间的时候,分配器会找一块空闲给用户,找空闲块需要时间,尤其是在外碎片比较多的情况。如果分配器找不到,就要考虑假碎片现象(释放的小块内存没有合并),这时候就要将这些已经释放的空闲块合并,这也需要时间。(2)mall原创 2021-03-13 14:18:14 · 254 阅读 · 0 评论 -
C++(七)——11/14 新特性
总结碰到的C++11/14新特性的内容,碰到一个新加一个,常看常新1、auto变量2、for(auto a: {1,2,3,4,5,6})3、STL中:新的容器类型 array、forward_list、Unordered_Set/Multiset、Unordered Map/Multimap原创 2021-03-11 21:54:22 · 127 阅读 · 0 评论 -
C++基础知识
面向对象编程基础面向对象编程基于三个基本概念:数据抽象-类 继承-基类/派生类 动态绑定-基类的函数or派生类的函数面向对象编程概述面向对象编程的关键思想是多态性(polymorphism)。多态性派生于一个希腊单词,意思是“许多形态”,之所以称通过继承而相关联的类型为多态类型,是因为在许多情况下可以互换地使用派生类型或基类型的“许多形态”。在C++中,多态性仅用于通过继承...原创 2018-03-18 09:02:56 · 259 阅读 · 0 评论 -
C++复习之路(六)——异常和文件
一、C++类型转换C语言强转存在的问题:过于强暴:任何类型之间都可以转换,编译器难以判断正确性难于定位:咋源码中无法定位使用强转的语句。 //不推荐使用强转。1、普通类型转换 :static_cast2、指针类型转换 : reinterpret_cast 3、类层次之间的转换 : dynamic_cast 4、用于const和非const之间的转换 : cons...原创 2019-01-25 19:48:39 · 587 阅读 · 0 评论 -
C++复习之路(五)——STL标准模板库
一、STL概述。1、基本概念STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件统称。STL从广义上讲分为三类:algorithm(算法)、container(容器)和 iterator(迭代器)。容器和算法可以通过迭代器无缝地连接。几乎所有代码都采用了模板类和模板函数的方式。相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在...原创 2019-01-23 11:39:33 · 655 阅读 · 0 评论