![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 94
Faiz..
分享学到的C/C++知识
展开
-
C++中的异常处理方式
在C++中,异常是程序运行期间发生的意外或错误情况。这些情况可能会导致程序无法继续正常执行,但又不能在当前的代码位置立即处理。异常提供了一种机制,使得在错误发生时可以将控制权从当前代码的执行位置转移到异常处理代码的位置,从而进行适当的处理。原创 2024-05-07 23:22:58 · 1051 阅读 · 3 评论 -
C++:特殊类的设计 | 单例模式
在单例模式中,类通常会提供一个静态成员函数来获取类的唯一实例,并且将构造函数设置为私有,以防止直接实例化类的对象。如果类的实例尚未创建,则静态成员函数会创建一个实例并返回它,否则会返回已存在的实例。原创 2024-05-06 18:33:06 · 706 阅读 · 3 评论 -
C++11:lambda表达式及function包装器
Lambda表达式是一种在C++11中引入的功能,允许我们定义匿名函数。它的语法比较简洁,可以方便地在需要函数对象的地方使用,例如STL算法、线程、智能指针等。原创 2024-05-04 21:58:03 · 1005 阅读 · 2 评论 -
C++:智能指针(RAII思想)
智能指针是一种用于管理动态分配的内存的 C++ 类。它们提供了对堆内存的自动分配和释放,以防止内存泄漏和悬挂指针的情况。常见的智能指针包括 std::unique_ptr、std::shared_ptr 和 std::weak_ptr。原创 2024-05-04 12:51:31 · 1069 阅读 · 1 评论 -
C++: IO流
文件 I/O 流在 C++ 中用于实现文件的读取和写入操作。它的主要组成部分包括文件流对象、文件打开和关闭、读取和写入文件数据、文件位置指针、文件状态检查以及错误处理。通过 ifstream、ofstream 和 fstream 对象,可以实现对文件的读取、写入和读写操作。原创 2024-04-24 13:40:09 · 718 阅读 · 2 评论 -
C++:类型转换
标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符:static_cast、reinterpret_cast、const_cast、dynamic_cast原创 2024-04-17 21:55:17 · 713 阅读 · 1 评论 -
C++11新特性系列(一)
C++11是C++语言的一个重要版本,于2011年发布。它引入了许多新特性和改进,以提高C++语言的表达能力、可移植性和性能。原创 2024-04-16 21:52:06 · 660 阅读 · 2 评论 -
C++:Hash应用【位图与布隆过滤器】
我们先来看一个问题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】如果我们使用unordered_set容器来解决,40亿个数据,每个数据占4个字节,那么一共需要16G内存,对于内存消耗太大了,而如果存储的不是整形数据,那么只会消耗更大。这个时候我们可以引出位图,每个整数是否存在可以使用一个对应比特位的0或者1来表示,这样原来32位才能表示一个数,现在只需要1位就可以解决,40亿个数据只需要0.5G。原创 2024-04-15 19:52:34 · 537 阅读 · 1 评论 -
unordered系列容器OJ
在C++标准库中,unordered系列容器是基于哈希表实现的,用于存储唯一键(对于unordered_set)或键值对(对于unordered_map),其中键具有唯一性。与map和set这类基于红黑树的容器相比,哈希表能够提供平均时间复杂度为O(1)的快速访问性能,不过在最坏情况下可能退化到O(n)。原创 2024-03-31 17:50:48 · 771 阅读 · 2 评论 -
用红黑树封装实现map和set
map和set都是基于红黑树实现的。红黑树是一种自平衡的二叉搜索树,它保持着良好的平衡性能,插入、删除、查找的时间复杂度都是O(log n)。在C++ STL中,map和set都是使用红黑树作为底层数据结构来实现的。原创 2024-03-15 16:45:23 · 1005 阅读 · 2 评论 -
C++:多态
多态是面向对象编程中的一个重要概念,它允许不同类的对象对同一个消息作出不同的响应。在C++中,多态性通过虚函数和指针/引用实现。原创 2024-03-09 13:00:40 · 809 阅读 · 2 评论 -
C++:菱形继承问题
在C++中,菱形继承是指一个派生类同时继承自两个直接或间接基类,而这两个基类又继承自同一个基类。这种继承结构形成了一个菱形的图形,因此得名菱形继承。菱形继承可能会引起一些问题,其中最主要的问题是数据冗余。由于派生类继承了两个基类,这两个基类都可能包含相同的数据成员,导致派生类中存在两份相同的数据,造成数据冗余和浪费内存。单继承:一个子类只有一个直接父类时称这个继承关系为单继承多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承菱形继承:菱形继承是多继承的一种特殊情况。原创 2024-03-02 17:28:42 · 1392 阅读 · 3 评论 -
C++:继承
继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。原创 2024-03-02 16:15:44 · 890 阅读 · 3 评论 -
C++:模板特化 非类型模板参数
假设有一个模板类,可以通过偏特化来为指针类型提供特殊的实现,或者为特定的数据结构提供特殊的处理。另外,也可以使用C++全特化来为特定的参数提供特殊的实现,以满足特定的需求。C++偏特化是模板编程中的重要特性,可以帮助我们根据具体的需求为模板提供更灵活和具体的实现。可复用性:通过特化模板,可以在不同的情况下重复使用通用的代码结构,从而提高代码的可复用性。提高性能:通过特化模板,可以为特定的类型或参数提供更高效的实现,从而提高程序的性能。运行发现比较的并不是预想中的a<b 而是比较的两个指针的大小。原创 2024-01-28 15:51:44 · 999 阅读 · 0 评论 -
Vector OJ:电话号码组合 数组中超过一半的数字
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。否则,我们获取当前位置处数字的数值,并使用for循环遍历与该数字关联的字母。给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。,分别用来记录当前数字的出现次数和出现次数超过一半的数字。的字符串,返回所有它能表示的字母组合。中的最后一个字符,以进行回溯并尝试下一个字母。的数组,用于存储数字与字母的映射关系。,即为数组中出现次数超过一半的数字。原创 2024-01-25 23:58:09 · 882 阅读 · 0 评论 -
C++:反向迭代器-reverse_iterator
在C++中,可以使用反向迭代器来逆序遍历容器中的元素。反向迭代器是通过rbegin()和rend()方法来获取的,它们分别指向容器的最后一个元素和第一个元素的前一个位置。此类反转双向或随机访问迭代器循环访问范围的方向。原始迭代器(基础迭代器)的副本保留在内部,用于反映在reverse_iterator上执行的操作:每当reverse_iterator递增时,其基本迭代器就会减少,反之亦然。可以随时通过调用成员 base 获取具有当前状态的基迭代器的副本。原创 2024-01-25 20:50:35 · 1166 阅读 · 1 评论 -
C++:优先队列-Priority_queue
top 元素是priority_queue中比较较高的元素,以及调用 priority_queue::p op 时从容器中删除的下一个元素。此成员函数有效地调用基础容器对象的成员函数push_back,然后通过对包含容器的所有元素的范围调用 push_heap 算法,将其重新排序到堆中的位置。使用的范围是 [first,last),它包括 first 和 last 之间的所有元素,包括 first 指向的元素,但不包括 last 指向的元素。在对基础容器进行排序之前,将此序列中的元素插入到基础容器中。原创 2024-01-24 17:08:08 · 1979 阅读 · 1 评论 -
C++: vector
C++中的vector是一个动态数组容器,可以存储任意类型的数据。它提供了动态大小的数组功能,可以在运行时动态地增加或减少其大小。vector是C++标准模板库(STL)中的一部分,因此可以使用标准库中提供的许多函数和算法来操作它。原创 2024-01-23 14:11:57 · 958 阅读 · 1 评论 -
C++:迭代器失效问题
在C++中,当一个vector进行了插入或删除操作时,其迭代器可能会失效。这是因为在插入或删除操作之后,vector可能会重新分配内存空间,导致原来的迭代器指向的位置不再有效。原创 2024-01-23 14:11:14 · 1034 阅读 · 1 评论 -
string OJ题
为防止遇到空格结束提取,使用getline函数提取字符串,然后使用迭代器遍历a字符串,使用find_last_of函数查找属于b字符串字符的pos位置,erase函数删除a.begin()+pos位置迭代器所指向的字符,如果pos不到npos说明没有删除完,pos==npos则删除完毕。每次取num1的最后一位当作乘数,然后乘被乘数,得到的结果存在cur中,注意每一次取num1的一位,要在cur后补0,最后调用字符串加法函数,将每一位乘法的结果也就是cur累加起来,最后反转字符串得到结果。原创 2024-01-22 15:15:04 · 845 阅读 · 1 评论 -
C++: string类
std::string在C++中也扮演着非常重要的角色,用于表示和操作字符串数据。原创 2024-01-22 15:13:39 · 1392 阅读 · 1 评论 -
C++:模板
函数模板是一种用于创建通用函数的工具。它允许编写函数的通用形式,以便可以使用不同的数据类型进行实例化。通过函数模板,可以编写一次通用的函数定义,然后根据需要用不同的数据类型进行特化,而无需为每种数据类型都重新编写函数。原创 2023-11-12 22:12:24 · 488 阅读 · 1 评论 -
C++: 内存管理
C/C++内存分布与内存管理相关知识原创 2023-11-09 16:48:10 · 301 阅读 · 2 评论 -
C++:类和对象(下篇)
C++中的类是一种用户自定义数据类型,可以创建对象来使用。类的对象有许多特性,包括内存的分配和释放、成员变量和成员函数的访问、对象的拷贝和销毁等。掌握这些特性,能够更好地使用类来组织代码,并提高程序的可维护性和可扩展性。原创 2023-10-31 18:22:18 · 75 阅读 · 5 评论 -
C++:类和对象(中篇)
C++类和对象基础知识,适合初学和复习原创 2023-10-30 21:03:11 · 53 阅读 · 2 评论 -
C++: 类和对象(上篇)
C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现structperror("malloc申请空间失败");return;_size = 0;// 扩容++_size;_size = 0;s.Init(10);s.Push(1);s.Push(2);s.Push(3);原创 2023-10-28 15:33:01 · 71 阅读 · 1 评论 -
C++入门: 引用 和 auto关键字
本文章主要讲解 引用 和 auto关键字的一些基础知识,适用于初学和复习。原创 2023-10-18 22:24:32 · 142 阅读 · 2 评论 -
C++入门:命名空间 函数重载 缺省函数 内联函数
本文主要介绍命名空间 函数重载 缺省函数 内联函数这些C++基础概念原创 2023-10-18 21:09:28 · 46 阅读 · 2 评论