C++
文章平均质量分 93
向着梦想dё方向前进
这个作者很懒,什么都没留下…
展开
-
C++智能指针
智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。原创 2020-09-10 11:05:27 · 302 阅读 · 0 评论 -
C++四种类型转换
在C语言中,C的强制转换表面上看起来功能强大,但是转化不够明确,不能进行错误检查,容易出错。因此C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符。原创 2020-08-23 14:04:10 · 523 阅读 · 0 评论 -
C++异常
异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接的调用者处理这个错误。异常对象定义好了,相比错误码的方式可以清晰准确的展示出错误的各种信息,甚至可以包含堆栈调用的信息,这样可以帮助更好的定位程序的bug原创 2020-08-23 02:04:20 · 701 阅读 · 0 评论 -
右值引用与lambda表达式
右值引用是C++11中引入的新特性,它实现了转义语义和精确传递。它的主要目的有两个方面:1.消除两个对象交互时不必要的对象拷贝,节省存储资源,提高效率。2.简洁明确的定义泛型函数。Lambda表达式定义一个匿名函数,并且可以捕获一定范围内的变量。原创 2020-08-23 01:24:05 · 886 阅读 · 0 评论 -
C++11新特性(部分)
C++11标准由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IEC JTC1/SC22/WG21)于2011年8月12日公布,并于2011年9月出版。此次标准为C++98发布后13年来第一次重大修正。相比较而言。C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率原创 2020-08-21 22:29:08 · 201 阅读 · 0 评论 -
位图与布隆过滤器
当面对海量的数据时,常见的数据结构与算法会浪费大量的时间与空间。为了更好的解决这一个问题,位图与布隆过滤器便应用而生。原创 2020-08-21 15:07:10 · 350 阅读 · 0 评论 -
哈希及unordered_map与unordered_set的底层实现
哈希表可提供对任何有名项的存取操作和删除操作。由于操作对象是有名项,所以哈希表也可以被视为一种字典结构,这种结构的用意在于提供常数时间的基本操作。原创 2020-08-21 00:02:25 · 6069 阅读 · 0 评论 -
红黑树及map与set的模拟实现
AVL-tree之外,另一个颇具历史并被广泛运用的平衡二叉搜素树是RB-tree(红黑树)。所谓RB-tree,不仅是一个二叉搜索树,而且其中一些条件,可以满足最长路径中节点个数不超过最短路径节点个数的两倍。原创 2020-08-18 22:26:20 · 859 阅读 · 0 评论 -
AVL树及其调整
AVL tree是一个”加上了额外平衡条件“的二叉搜索树。其平衡条件的建立是为了确保整棵树的深度为O(logN)。AVL树保证每个节点的左右子树高度差最多为1.这是一个较弱的概念,但是能够保证”对数深度“的平衡状态。原创 2020-08-18 14:07:46 · 826 阅读 · 0 评论 -
map与set的使用
set的特性是:所有元素都会根据元素的键值自动排序。set的元素不像map那样可以同时拥有实值和键值,set元素的键值就是实值,实值就是键值。set不允许有两个相同的键值。而与set唯一不同的是multiset可以拥有相同的键值。map的特性是,所有元素根据元素的键值被自动排序。map的所有元素都是pair,同时拥有实值和键值。而与map唯一不同的是multimap允许键值重复。原创 2020-08-09 13:31:07 · 352 阅读 · 0 评论 -
二叉搜索树
所谓二叉搜索树,可提供对数(logN)时间的元素插入与访问。二叉搜索树的节点放置规则是:任何节点的键值一定大于其左子树的每一节点的键值,并小于其右子树的每一个节点的键值。因此,二叉搜索树的中序遍历为数据的升序。原创 2020-08-05 18:47:21 · 292 阅读 · 0 评论 -
C++多态特性及原理
多态是面向对象三大特性之一。它是指在同一操作作用于不同的对象时,可以有不同的解释,并产生不同的执行结果。多态提高了代码的维护性(继承保证),提高了代码的扩展性(多态保证)。原创 2020-08-03 13:23:10 · 237 阅读 · 0 评论 -
C++继承与菱形继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承是类设计层次的复用。原创 2020-07-31 22:38:38 · 196 阅读 · 0 评论 -
非类型模板参数与类模板
模板在实际中应用非常广泛,C++STL底层用了大量模板来适配各种情形。模板在实际开发中,大大提高了效率,以便于更快的迭代开发。原创 2020-07-27 12:51:38 · 1150 阅读 · 0 评论 -
STL之priority_queue及其底层实现
priority_queue是一个具有权值观念的queue,它允许加入元素,移除旧元素,审视元素值等功能。由于这是一个queue,所以只允许在低端插入数据,并从顶端取出元素,初次之外别无其它途径存取元素。原创 2020-07-25 01:46:03 · 4243 阅读 · 0 评论 -
STL之queue及其底层实现
queue是一种先进先出(FIFO)的数据结构。queue允许新增元素、移除元素、在尾部插入元素以及取得顶端元素。除了最顶端可以取出元素之外,没有方法取出其他元素,所有queue不允许有遍历行为。原创 2020-07-24 00:02:54 · 7935 阅读 · 3 评论 -
STL之stack及其底层实现
stack是一种先进后出(FILO)的数据结构。它只有一个出口。stack允许新增元素,移除元素,取得最顶端元素。它在括号匹配,逆波兰表达式等问题中有着广泛的运用。原创 2020-07-23 23:03:14 · 4491 阅读 · 0 评论 -
STL之list及其底层实现
相较于vector的连续线性空间,list要复杂许多,它相当于带头节点的双向循环链表,对于任何位置的元素插入或元素移除,list永远是常数时间。因此,list对于空间的运用有绝对的精准。原创 2020-07-20 22:14:39 · 1279 阅读 · 0 评论 -
STL之vector及其底层实现
vector相当于一个动态数组,随着元素的加入,它的内部机制会自行扩充空间以容纳元素。因此,vector的运用对于内存的合理运用与运用的灵活性有很大的帮助。原创 2020-07-18 21:43:59 · 1104 阅读 · 1 评论 -
函数模板与类模板?看这就够了
在C++中,如果我们需要使用两个数据类型不同swap函数,一般思路是写两个函数出来。那能不能一劳永逸呢?C++模板就巧妙解决了这个问题。原创 2020-04-30 17:25:30 · 205 阅读 · 0 评论 -
关于C/C++内存管理,你该知道这些
在计算机系统中,尤其在嵌入式中,内存资源非常有限。因此对于一个C/C++程序员来说,如何有效地管理内存是在程序设计中首要考虑的问题。原创 2020-04-27 18:07:47 · 239 阅读 · 0 评论 -
C++类与对象
本文介绍了C++构造函数初始化列表,static成员,友元,内部类,C++11新成员初始化方式以及它们的使用方式。原创 2020-04-25 17:41:33 · 163 阅读 · 0 评论 -
类的6个默认成员函数
C++类有6个默认成员函数,即不需要自己实现编译器也可自己调用。那么它们分别是哪6个默认成员函数以及在什么情况下需要自己来实现呢?请带着这些问题,从本文中寻找答案吧!原创 2020-04-19 23:29:06 · 299 阅读 · 0 评论 -
C++函数重载
本文主要介绍为什么C++支持重载,以及C与C++编译器在代码执行过程中的处理比较。原创 2020-03-30 14:48:31 · 304 阅读 · 0 评论 -
C++类与this指针
本文首先引入C++中类的概念,并借助类的概念来介绍类中隐含的this指针。原创 2020-04-01 20:29:06 · 293 阅读 · 0 评论