
c++知识点
文章平均质量分 92
渡我白衣
时间从来不语,却回答了所有问题
展开
-
C++11:现代C++的演变与提升
在2003年,C++标准委员会发布了一份技术勘误表(简称TC1),使得C++03取代了C++98成为C++标准的最新版本。然而,C++03(TC1)主要集中于修复C++98中的缺陷,而语言的核心部分并没有重大变化。因此,人们通常将这两个标准统称为C++98/03。C++11,这个被称为“C++0x”的标准,经过十年的发展终于正式发布。与C++98/03相比,C++11带来了许多显著的变化和改进。原创 2024-09-26 00:09:16 · 1006 阅读 · 4 评论 -
高阶数据结构之哈希表基础讲解与模拟实现
哈希表(Hash Table)是一种高效的键值对存储数据结构,广泛应用于各种需要快速查找的场景,如数据库索引、缓存系统、集合等。它的基本思想是通过哈希函数将键映射到哈希表中的一个位置,从而实现快速的数据插入、删除和查找操作。下面我们将详细介绍哈希表的工作原理、实现方式、优缺点以及应用场景。哈希表作为一种重要的数据结构,提供了高效的查找、插入和删除操作。通过设计良好的哈希函数和适当的冲突解决策略,可以最大化哈希表的性能。原创 2024-09-12 23:11:55 · 1167 阅读 · 2 评论 -
二叉搜索树进阶之红黑树
红黑树在计算机科学中有着广泛的应用,尤其是在需要频繁插入和删除操作的数据结构中。虽然其实现较为复杂,但红黑树通过严格的平衡规则和旋转操作,能够提供稳定、高效的性能表现,是一种非常重要的自平衡二叉搜索树。了解红黑树的基本性质和操作过程,对于深入理解高级数据结构以及其在实际应用中的优化是非常有帮助的。希望本文对您有所帮助!!原创 2024-08-29 22:00:35 · 968 阅读 · 3 评论 -
搜索二叉树进阶之AVL树
AVL树是Adelson-Velsky和Landis在1962年发明的一种自平衡二叉搜索树。它的特点是通过对树进行旋转操作来保持平衡,以确保在最坏情况下,树的高度仍然是O(log n),从而保证插入、删除和查找操作的时间复杂度都是O(log n)。AVL树作为自平衡二叉搜索树的经典实现,通过对树的高度进行严格控制,确保了高效的查找、插入和删除操作。尽管其操作复杂度较高,但在需要频繁查找和维护较大数据集的场景中,AVL树无疑是一种值得选择的数据结构。原创 2024-08-23 23:50:45 · 955 阅读 · 6 评论 -
map与set容器初识:初步运用map与set
在本文中,我们通过多个实际例题,深入探讨了map和set容器的常见操作和实际应用。这些容器在处理数据的过程中能够提供强大的支持,尤其在涉及到元素的唯一性、快速查找和数据关联的场景下。学习map和set容器不仅仅是掌握其基本用法,更重要的是通过实践,理解它们在不同场景中的应用和优势。本文的示例和解析,希望能帮助读者更好地掌握这些工具,并在今后的算法和编程实践中更加得心应手。通过不断练习,读者可以熟练地将map和set应用于各种复杂的数据处理任务中,从而提升编程效率和代码质量。原创 2024-08-21 21:58:23 · 1205 阅读 · 7 评论 -
二叉树进阶之二叉搜索树:一切的根源
在学完了简单的容器与C++面向对象的三大特性之后,我们首先接触的就是map与set两大容器,但是这两个容器底层实现的原理是什么呢?我们不而知,今天,主要来为学习map与set的底层原理而打好基础,而二叉搜索树,则是一切的开端......一、二叉搜索树的定义与性质: 对于每个节点N,其左子树中所有节点的值都小于N,右子树中所有节点的值都大于N。: 对二叉搜索树进行中序遍历(左-根-右)时,节点的值按升序排列。: 在平均情况下,查找、插入和删除操作的时间复杂度都是 O(log n)。原创 2024-08-17 21:59:38 · 873 阅读 · 11 评论 -
继承与多态常见面试题解析
3. 面向对象设计中的继承和组合,下面说法错误的是?()A:继承允许我们覆盖重写父类的实现细节,父类的实现对于子类是可见的,是一种静态复用,也称为白盒复用B:组合的对象不需要关心各自的实现细节,之间的关系是在运行时候才确定的,是一种动态复用,也称为黑盒复用C:优先使用继承,而不是组合,是面向对象设计的第二原则D:继承可以使子类能自动继承父类的接口,但在设计模式中认为这是一种破坏了父类的封装性的表现。原创 2024-07-26 00:41:52 · 1090 阅读 · 4 评论 -
探索C++中的多态性:理解虚函数和运行时多态
在现代软件开发中,面向对象编程(OOP)已经成为了主流。其中一个强大的概念就是多态性(Polymorphism),它不仅仅是一种技术,更是一种设计思想和实现方式,为软件开发带来了巨大的灵活性和可维护性。多态性允许我们使用统一的接口来处理不同类型的对象,同时根据对象的实际类型来调用适当的方法。这种动态绑定的特性不仅提高了代码的复用性和可扩展性,还使得软件系统能够更好地适应变化和需求的增加。本博客将深入探讨C++语言中多态性的各个方面:从基本概念到实际应用,从虚函数到虚函数表,从继承到接口隔离。原创 2024-07-23 23:41:06 · 945 阅读 · 4 评论 -
C++面向对象三大特性:继承
public继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。组合是一种has-a的关系。假设B组合了A,每个B对象中都有一个A对象。继承允许你根据基类的实现来定义派生类的实现。这种通过生成派生类的复用通常被称为白箱复用(white-box reuse)。术语“白箱”是相对可视性而言:在继承方式中,基类的内部细节对子类可见。继承一定程度破坏了基类的封装,基类的改变,对派生类有很大的影响。派生类和基类间的依赖关系很强,耦合度高。对象组合是类继承之外的另一种复用选择。原创 2024-07-20 23:26:26 · 871 阅读 · 1 评论 -
C++初阶编程:list容器的简单模拟实现
在C++标准库中,list是一种双向链表容器。这里简单提一下双向链表——什么是双向链表呢?一个存储数据的字段。(我们通常用_data表示)一个指向前驱节点的指针。(我们通常用_prev表示)一个指向后继节点的指针。(我们通常用_next表示)这样,每个节点都知道它的前一个节点和后一个节点,从而支持在常数时间内进行插入和删除操作。在实现list之前,我们要先定义一下这个链表的节点结构。一个链表是有多个节点链接组成,所以节点自然是重中之重。原创 2024-06-29 19:45:42 · 941 阅读 · 1 评论 -
C++编程:模板初阶
函数模板是一种用于定义一组相关函数的蓝图。这些函数模板在使用时会根据实参类型生成具体的函数版本。T c = a;a = b;b = c;(typename是用来定义模板参数的关键字,也能用class代替)在编译时,编译器会根据传入的实参类型生成具体类型的函数。Swap(a, b);// 编译器生成处理int类型的Swap函数Swap(x, y);// 编译器生成处理double类型的Swap函数。原创 2024-06-01 21:29:39 · 880 阅读 · 4 评论 -
C++:类与对象(上)
class是我们定义类所使用的关键字,使用方法跟定义结构体类似,我们可以在类的主体部分定义成员变量与成员函数。类通常有两种定义方式,第一种就是声明与定义全部放在类体中,但需要注意的是,如果函数是在类里面定义的,编译器可能默认会将函数处理成内联函数。第二种方法就是类声明放在.h头文件中,定义放在.cpp源文件上,一般来说,除非迫不得已,我们更推荐使用第二种定义方式。但需要注意的是,由于类域的限制,我们在.cpp文件中写定义的时候,要在函数名前加上类名::这一点就跟C语言模拟实现栈,队列等数据结构一样。原创 2024-04-19 19:51:08 · 828 阅读 · 6 评论 -
命名空间:组织代码的利器
在大型项目的代码分工工作中,通常会出现不同的人自己定义了相同名字的函数,参数等。就可能出现名字冲突或者命名污染等问题。为了避免这些问题的出现吗,我们就引出了“namespace”,命名空间这一概念。使用命名空间的目的是为了对标识符的的名称进行本地化,防止命名冲突,提高代码的可读性与可维护性。通过命名空间,我们可以将代码模块化,使得代码结构更清晰。在c语言中当我们定义一个全局变量rand,就会与stdlib.h库中的rand函数冲突。于是我们就在c++中引入了命名空间的概念。原创 2024-03-30 17:46:28 · 456 阅读 · 1 评论