
C++
文章平均质量分 89
C++知识点
SuhyOvO
知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达!
展开
-
std::sort的底层原理(混合排序算法)
std::sort是 C++ 标准库中的高效排序算法,采用了混合排序策略,默认使用快速排序来排序大数据集,对于小数据集则使用插入排序,在需要时会退回到堆排序。std::sort的实现还使用了多种优化策略,包括三数取中法、递归深度控制等,确保在不同情况下都能提供 O(n log n) 的平均时间复杂度。通过这些优化,std::sort在大多数实际应用中表现出色原创 2024-11-15 10:53:19 · 1168 阅读 · 0 评论 -
【C++】如何在一个类外访问私有类成员变量
私有成员是封装的一部分,它们只能在类的内部访问。我们如何在类外去访问他们呢?原创 2024-05-18 12:58:11 · 1600 阅读 · 0 评论 -
【C++】八大常见的设计模式
本文将讲解几种常见的设计模式,并使用C++编写相应的代码示例。适配器模式将一个类的接口转换成客户端期望的另一个接口,消除由于接口不兼容而导致的类无法一起工作的问题。模板方法模式定义了一个算法的骨架,将一些步骤延迟到子类中实现,使得子类可以重新定义算法的步骤。建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。懒汉式单例模式在第一次使用时初始化实例,懒加载,节省资源,但需要考虑线程安全。工厂模式用于创建对象的实例,而不需要指定具体的类。原创 2024-06-18 15:39:50 · 3838 阅读 · 1 评论 -
【C++】文件处理(IO流)
主要介绍了C++中的文件输入输出操作,包括基本的文件流类型(ifstream、ofstream和fstream)及其用法。文章对比了C语言和C++在文件操作上的不同,展示了如何使用C++标准库进行文件的读取和写入,包括按字符、按行、按块等多种方式。同时,还介绍了字符串流(stringstream)的使用,以及如何对自定义对象进行序列化和反序列化操作,提供了丰富的代码示例,帮助读者深入理解和掌握C++文件操作。原创 2024-06-24 12:03:31 · 957 阅读 · 0 评论 -
【C++】RAII:资源获取即初始化
RAII,全称为Resource Acquisition Is Initialization,由C++之父Bjarne Stroustrup提出,中文翻译为“资源获取即初始化”。Stroustrup说:“使用局部对象来管理资源的技术称为资源获取即初始化。”原创 2024-05-18 11:39:54 · 555 阅读 · 0 评论 -
【C++ 】智能指针
智能指针是 C++ 中用于管理动态分配内存的强大工具。它们旨在解决原生指针可能导致的内存泄漏和悬挂指针等问题。智能指针的核心思想是在其生命周期结束时自动释放所管理的内存,从而避免了手动管理内存时可能出现的问题。然而,尽管智能指针是强大而方便的工具,但在使用过程中仍然需要注意一些陷阱,以避免出现意外的错误。原创 2024-04-23 13:48:29 · 1100 阅读 · 2 评论 -
【C++ 】异常
异常是程序在执行期间产生的问题,任何事物,任何情况都可以当做异常,错误算是异常的一种 。C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。原创 2024-04-20 21:42:11 · 655 阅读 · 0 评论 -
【C++ 】C++11(下篇)
本文将介绍C++11中一些最具代表性的新特性,包括模板的可变参数、lambda表达式、包装器(如function和bind)、以及线程库中的thread、mutex、atomic和condition_variable类。通过深入了解这些特性,我们可以更好地利用现代C++编程的优势,提高代码的可读性、可维护性和性能。原创 2024-04-16 22:07:16 · 1002 阅读 · 1 评论 -
【C++ 】C++11(上篇)
在C++11标准中,引入了许多重要的语言特性,这些特性极大地改进了C++的表达能力和编程体验。其中,列表初始化、变量类型推导、右值引用和移动语义、默认成员函数等特性为C++编程带来了全新的可能性和效率提升。本文将介绍C++11中最重要的特性,并探讨它们的用途和优势。原创 2024-04-15 17:48:20 · 702 阅读 · 0 评论 -
【C++ 】 如何去认识模板
C++模板是一个非常强大的工具,它提供了一种抽象和复用代码的方式,使得我们可以编写出高度泛型的代码。通过对模板的深入理解和灵活运用,我们可以大大提高代码的质量和效率。当然,模板也不是万能的。过度使用模板可能会导致代码复杂度的增加,编译时间的延长。原创 2024-03-25 16:43:49 · 890 阅读 · 0 评论 -
【C++】STL快速入门基础
STL(Standard Template Library)是一个具有工业强度的、高效的C++程序库,被容纳于C++标准程序库中,是ANSI/ISO C++标准中最新的一部分。STL包含了在计算机科学领域常用的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应用框架,高度体现了软件的可复用性。原创 2024-05-20 18:04:02 · 1174 阅读 · 0 评论 -
【C++ 】多态的底层实现原理
在面向对象编程中,多态是一个核心概念,它允许使用父类类型的指针或引用来引用子类对象,并通过这种方式实现在运行时选择适当的方法。本文将深入探讨多态的底层实现原理,包括虚函数、虚函数表、派生类和虚函数覆盖、多态的运行时行为以及动态绑定与静态绑定。原创 2024-04-20 23:59:14 · 321 阅读 · 0 评论 -
【C++ 】多态
virtual修饰的、非静态的成员函数称为虚函数。虚函数可以像普通函数一样调用,但虚函数的作用主要是实现多态。虚继承也用到virtual关键字,但虚函数和虚继承没有任何关系。子类重新定义父类中的虚函数,就叫做子类重写/覆盖了父类的虚函数。具有继承关系的两个类中,返回类型、函数名、参数列表完全相同的虚函数构成重写,不构成隐藏。概念要求1要求2要求3重载在同一作用域函数名相同,参数列表不同重定义/隐藏在父子类作用域函数名相同重写/覆盖在父子类作用域函数名、参数、返回值完全相同(协变例外)原创 2024-04-10 17:05:21 · 1039 阅读 · 0 评论 -
【C++ 】继承
对于具有一定关系的一类群体,将其抽象成一类对象后,这些对象必然会具有重复的属性。比如学生老师都属于人,他们都有名字、年龄等共有属性,不同的是学生有学号,教师有职工号。因此可将共有属性放到人这个类,将二者独有属性放入各自的类。避免代码冗余,也更能体现出类的层次设计。//中间用:间隔原有类称为基类或父类,继承而来的类叫派生类或子类。继承后子类也拥有了父类的成员变量和函数,使得子类可以使用父类的成员,这便是继承的意义。原创 2024-04-06 22:29:11 · 693 阅读 · 0 评论 -
【C++】类和对象
介绍了类和对象的定义、特性、封装、实例化及内存存储方式等内容,深入阐述了面向对象编程的基本原理和C++语言中的具体实现。原创 2024-07-09 17:19:02 · 654 阅读 · 0 评论 -
【C++ STL】unordered_map&unordered_set (哈希表)
哈希也叫做散列,记数排序就体现了哈希思想。计数排序为统计数字出现的个数,为每个数字都开辟了对应的一块空间,用来记录其出现的个数,每遇到就加一。将一个元素和一个位置建立映射关系,这就是哈希的本质。常见的数据类型如整数,库中自带哈希函数,但有些类型比如自定义类型,需要我们自定义哈希函数。可以把哈希函数设计成仿函数,对不同类型添加特化处理。return key;// 特化template<>//BKDRreturn val;原创 2024-08-08 11:43:27 · 1236 阅读 · 0 评论 -
【C++ STL】priority_queue
只需将堆顶元素逐步向下调整:将根结点与其较大/小的子结点交换,只要父结点比子结点中任意一个大/小,就进行交换,直到交换到叶结点或不满足条件为止。此时堆的性质可能被破坏,不过只会影响该结点到根结点所在路径上的所有结点,故顺势向上调整:一直交换结点数值直到满足堆的性质即可。仿函数相当于更高级的泛型,使用仿函数能够改变执行逻辑,仿函数内部的实现完全由用户自定,拥有极大的自定义空间。比较大小操作符写死不便用户修改,使用宏定义,函数指针都比较复杂,还有一种简单的方式就是仿函数。操作符模仿函数的调用方式。原创 2024-08-08 10:52:13 · 716 阅读 · 0 评论 -
【C++ STL】deque
vector是单向开口的连续线性空间,deque是一种双向开口的连续线性空间。双向开口就是说deque支持从头尾两端进行元素的插入和删除操作相比于vector的扩容空间的方式,deque实际上更加贴切的实现了动态空间的概念。deque没有容量的概念,因为它是动态以分段连续空间组合而成,随时可以增加一段新的空间并连接起来。由于要维护这种整体连续的假象,并提供随机存取的接口,也就是说提供random access iterator,避开重新配置,复制,释放的轮回,代价是复杂的迭代器结构。原创 2024-08-05 12:21:28 · 719 阅读 · 0 评论 -
【C++ STL】stack&queue
是⼀种先进后出的数据结构,只有⼀个出口,stack 允许从最顶端新增元素,移除最顶端元素,取得最顶端元素。deque 是双向开口的数据结构,所以使⽤ deque 作为底部结构并封闭其头端开口,就形成了⼀个stack。栈的插入被称为压栈、进栈、入栈,删除被称为出栈、弹栈。后进先出,先进后出,LIFOLIFOLIFO原则(Last In First Out)。原创 2024-08-05 12:18:43 · 1069 阅读 · 0 评论 -
【C++ STL】 map&set
`std::set` 和 `std::map` 是 C++ 标准库中基于红黑树实现的关联容器。`std::set` 存储唯一的键,并自动排序,适合需要快速查找和排序唯一元素的场景。而 `std::map` 存储键值对,每个键唯一,并按键排序,适用于需要关联值并按键进行检索的应用。它们的实现保证了高效的插入、删除和查找操作,是 C++ 编程中常用的数据结构之一。原创 2024-08-02 13:18:30 · 862 阅读 · 0 评论 -
【C++ STL】list
list是 C++ STL 中的双向链表容器,它能够高效地支持元素的插入和删除操作,即使在容器中间。每个节点存储数据以及指向前一个和后一个节点的指针,这种特性使得 list 在需要频繁插入和删除元素时表现优秀。与 vector 不同,list 的内存空间不是连续的,因此随机访问效率较低(时间复杂度为 O(n)),但它提供了双向遍历的能力。list 还支持逆向迭代器,允许从尾部向头部遍历列表。原创 2024-08-04 12:07:51 · 999 阅读 · 0 评论 -
【C++ STL】vector
在C++编程中,vector是一个十分常用且强大的动态数组容器。它能够动态增长和收缩,适应不同大小的数据集合,同时提供了高效的随机访问能力。vector通过动态分配内存来存储元素,支持快速的尾部插入和删除操作,其内部实现保证了连续存储元素,使得对内存的利用更为高效。原创 2024-08-04 11:55:54 · 1284 阅读 · 0 评论 -
【C++ STL】string
C语言中,字符串以'\0'结尾的一些字符的集合。为操作方便,同时提供了一些关于 str 库函数,但这些库函数和字符串是分离的,并不符合面向对象的思想。string 是 C++ 中管理字符数组的一个类,是 STL中的一个容器,把字符串交由 string 管理,减轻了编程难度。原创 2024-08-02 13:30:59 · 848 阅读 · 0 评论 -
【C++ 】拷贝构造函数与深浅拷贝
在C++编程中,拷贝构造函数和深浅拷贝是两个至关重要的概念。原创 2024-03-20 15:20:57 · 390 阅读 · 0 评论 -
【C++】inline 内联函数
通过理解内联函数和虚函数的使用及其特性,可以更有效地优化代码性能,同时保证代码的安全性和可维护性。原创 2024-05-17 08:50:29 · 635 阅读 · 0 评论 -
【C++ 】动态内存管理:new/delete与malloc/free的对比
当谈到C++中的动态内存管理时,new和delete与malloc和free是两个经常讨论的主题。虽然它们的目的相似,但在使用、安全性和灵活性方面存在显著差异。原创 2024-03-23 22:23:42 · 969 阅读 · 0 评论 -
【C++】你了解多少种 C++ 输入方法?
不同的输入方法有不同的适用场景和特点。了解这些细微的差别有助于在编程时选择合适的输入方式,以满足不同的需求。希望这篇文章能帮助大家更好地理解和应用cincin.get()getchar()getline()和。原创 2024-06-06 00:59:19 · 741 阅读 · 0 评论 -
【C++ 】详解const关键字
在C++编程中,const关键字是一个强大的工具,不仅可以用于定义常量,还能够在函数、类中发挥关键作用。本篇博客将带您深入探索const关键字的魅力,教您如何利用它来提升代码的安全性和可维护性。原创 2024-03-22 00:39:09 · 1458 阅读 · 0 评论 -
【C++ 】详解Static关键字
Static关键字用于声明变量或函数的存储期为整个程序的执行期间,即使它们的作用域是局部的。在C++中,static还可以用来定义类的静态成员。静态关键字在C++中提供了强大的工具,用于控制对象的可见性、生命周期和初始化。通过正确使用它们,可以写出更健壮、更易于维护的代码。然而,也需要注意静态成员可能引入的全局状态,这可能会影响程序的可测试性和线程安全性。原创 2024-03-25 16:09:06 · 1657 阅读 · 0 评论 -
【C++ 】入门基础知识
C++入门基础知识详解原创 2024-03-20 15:57:44 · 442 阅读 · 0 评论