C++
文章平均质量分 95
妖精七七_
一以贯之
展开
-
【二十八】【C++】vector类的运用复习
创建了一个空的对象vec。:创建了一个包含10个默认初始化(即值为0)的int元素的对象vec1。:创建了一个包含5个元素,每个元素都初始化为9的对象vec2。:使用初始化列表创建了一个包含5个元素(1, 2, 3, 4, 5)的对象vec3。:使用vec3的迭代器范围来创建vec4,复制了vec3中的所有元素。:同样使用迭代器范围来创建vec5,但这次只复制了vec4中的前三个元素。:使用vec5来进行拷贝构造创建了vec6,复制了vec5中的所有元素。:使用赋值运算符将vec6。原创 2024-03-12 23:02:34 · 886 阅读 · 2 评论 -
【二十七】【C++】二叉树练习
给你二叉树的根节点root,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对"()"表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。树中节点的数目范围是这道题目蕴含的规则,每个节点的值都转换成字符串。对于非叶子节点,其左子节点(如果存在)的字符串表示将被放置在一对括号内紧跟在该节点的值之后。如果左子节点不存在但右子节点存在,将使用一对空括号()表示左子节点的位置。原创 2024-02-24 14:51:54 · 992 阅读 · 1 评论 -
【二十六】【C++】Map和Set
在数据结构中,二叉搜索树(BST)的应用通常围绕着两种基本模型:键模型(K模型)和键值对模型(KV模型)。这两种模型定义了树中节点存储数据的方式,以及如何通过这些数据进行查找、插入和删除操作。在K模型中,每个节点存储一个单一的数据项,称为“键”(Key这个模型的核心特性是:唯一性:树中每个键都是唯一的,不允许重复。有序性:树中任意节点的左子树只包含键小于该节点的键的节点,其右子树只包含键大于该节点的键的节点。操作:基本操作包括插入新键、查找键和删除键。所有操作都依赖于键之间的比较。K。原创 2024-02-22 13:18:41 · 948 阅读 · 1 评论 -
【二十五】【C++】二叉搜索树及其简单实现
二叉搜索树(BST)是一种特殊的二叉树,它具有以下性质:每个节点都有一个键(或值),并且每个节点最多有两个子节点。左子树上所有节点的键都小于其根节点的键。右子树上所有节点的键都大于其根节点的键。左右子树也都是二叉搜索树。1. 插入节点(Insertion)插入操作是将一个新的键值对添加到二叉搜索树中。插入过程需要保证树的二叉搜索属性:节点的左子树只包含小于节点键的节点,节点的右子树只包含大于节点键的节点。2. 搜索节点(Search)搜索操作用于在二叉搜索树中查找一个键。如果键存在,返回对应的节点;否则,返原创 2024-02-21 13:24:43 · 999 阅读 · 1 评论 -
【二十三】【C++】继承
如果派生类声明了一个与基类中同名的成员,无论它们的参数是否相同,都会隐藏基类中所有同名的成员。(只要。原创 2024-02-20 14:07:01 · 1239 阅读 · 1 评论 -
【二十四】【C++】多态
重载 (Overloading)重载指的是在相同作用域内有两个或多个函数拥有相同的名称,但是它们的参数列表不同(参数类型、个数或者顺序不同)。重载使得函数可以根据不同的参数执行不同的任务。两个函数在同一作用域函数名相同参数列表不同在这个例子中,print函数被重载了三次,分别接受intdouble和类型的参数。重写 (Overriding)重写是面向对象编程中的一个概念,指的是派生类中的函数重写了基类中具有相同名称相同参数列表相同返回值(或协变)的虚函数。重写用于实现运行时多态。原创 2024-02-19 20:45:24 · 1126 阅读 · 1 评论 -
【二十二】【C++】继承基础和父子对象赋值转换
C++中的继承是面向对象编程(OOP)的一个核心概念,它允许一个类(派生类)继承另一个类(基类)的属性和方法。这使得在保持代码重用性的同时,还能实现代码的逻辑分层和扩展。基类(Base Class):被继承的类,有时也称为父类或超类。派生类(Derived Class):继承基类的类,有时也称为子类。访问修饰符:C++中有三种访问修饰符,分别是publicprotected和private,它们决定了类成员(包括继承的成员)的访问权限。原创 2024-02-18 15:15:17 · 1341 阅读 · 1 评论 -
【二十一】【C++】模版特化
类型模板参数允许在定义模板时指定一个占位符,这个占位符在模板实例化时将被具体的类型替换。这使得我们能够编写与类型无关的通用代码。例如,标准库中的使用一个类型模板参数T,这意味着你可以有一个或任何其他,其中T是实际的类型。在这个例子中,T是一个类型模板参数,用于在类内部表示一个未知的类型。非类型模板参数允许你将值(而不是类型)作为参数传递给模板。这些参数必须是编译时常量表达式,因为模板实例化发生在编译时。非类型模板参数可以是整数、枚举、指向函数或对象的指针、引用、或者浮点数(C++20起)。原创 2024-02-17 13:40:47 · 939 阅读 · 1 评论 -
【二十】【C++】优先队列的简单实现和215. 数组中的第K个最大元素
给定整数数组nums和整数k,请返回数组中第 k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。你必须设计并实现时间复杂度为O(n)的算法解决此问题。原创 2024-02-16 14:40:58 · 1023 阅读 · 1 评论 -
【十九】【C++】 priority_queue简单使用和仿函数
优先队列是一种容器适配器,专门设计成其中的第一个元素始终是根据某种严格的弱排序准则最大的元素。这种上下文类似于堆,其中元素可以在任何时刻插入,而只能检索最大堆元素(在优先队列中顶部的元素)。优先队列被实现为容器适配器,这些适配器是使用特定容器类的封装对象作为其底层容器的类,提供一组特定的成员函数来访问其元素。元素从特定容器的“后面”弹出,这被称为优先队列的顶部。底层容器可以是任何标准容器类模板或其他特定设计的容器类。empty()size()front()pop_back()标准容器类。原创 2024-02-15 17:53:01 · 1062 阅读 · 1 评论 -
【十八】【C++】deque双端队列简单使用和deque底层实现探究(部分代码)
struct __deque_iterator {//deque迭代器定义了一个模板,T是数据类型,Ref是引用类型,Ptr是指针类型,BufSiz是缓冲区大小。定义了一个结构体,作为deque的迭代器。//结点的大小//结点指针定义了迭代器和常量迭代器类型,分别用于修改和访问deque元素。定义了一个静态成员函数,用来计算每个缓冲区的大小。定义了为。这表示是一个随机访问迭代器,支持像数组一样的快速随机访问。原创 2024-02-14 22:32:50 · 1298 阅读 · 3 评论 -
【十七】【C++】stack的简单实现、queue的常见用法以及用queue实现stack
这段代码定义了一个模板类stack,位于命名空间Mystack中。它是对C++标准库容器的一种适配,使其表现得像一个栈(Stack)。栈是一种后进先出(Last In, First Out,LIFO)的数据结构,这意味着最后被加入栈的元素会是第一个被移除的。这个自定义栈通过内部封装了一个容器(默认为)来实现其功能。T:栈中存储的元素类型。Container:底层容器类型,用于实际存储栈中的元素,默认为。deque(双端队列)是一个允许在两端进行插入和删除操作的序列容器。构造函数stack()原创 2024-02-13 15:15:08 · 1436 阅读 · 1 评论 -
【十六】【C++】stack的常见用法和练习
C++标准库中的stack是一种容器适配器,它提供了后进先出(Last In First Out, LIFO)的数据结构。stack使用一个底层容器进行封装,如dequevector或list,但只允许从一端(顶部)进行添加或移除元素的操作。stack不提供迭代器,因为它不支持遍历操作。要使用stack,需要包含头文件stack创建一个stack这里创建了一个整数类型的stack。默认情况下,stack使用deque作为其底层容器。push()向栈顶添加一个元素。pop()原创 2024-02-12 22:55:00 · 1254 阅读 · 1 评论 -
【十五】【C++】list的简单实现
这段代码主要展示了如何在 C++ 中使用std::list容器来存储和遍历自定义类型(Date类)的对象以及基本数据类型(int)的值。程序定义了一个Date类,用于表示日期,并提供了一个Show成员函数来打印日期。然后,它在函数TestList8中创建了两个std::list容器:一个存储Date对象,另一个存储int值。通过迭代器遍历这些列表,并展示了如何访问和操作容器中的元素。这段代码看似平平无奇,细心的小伙伴可能会发现,在遍历L1list对象的时候,it1->Show();原创 2024-02-11 20:35:31 · 2890 阅读 · 1 评论 -
【十四】【C++】list 的常见用法
是一个双向链表,提供了双向序列的特性,包括有效地进行插入、删除操作等,但不支持随机访问。std::list空初始化:创建了一个空的int类型的list。填充初始化:创建了一个包含 10 个元素,每个元素都初始化为 5 的list。范围初始化:使用的迭代器范围来初始化L3,即将v中的元素复制到L3中。拷贝初始化:使用另一个listL3来初始化L4,复制L3的所有元素。列表初始化 (C++11):使用初始化列表直接初始化L5。范围for循环: 使用范围for循环遍历L2,打印出其所有元素。原创 2024-02-10 21:55:22 · 3569 阅读 · 1 评论 -
【十三】【C++】vector简单实现
int _month;int _day;it++;return 0;#endif我们定义的vector类中并没有重载->的实现,但我们依旧可以通过迭代器->的解引用访问对象的成员属性。原创 2024-02-09 16:06:28 · 1004 阅读 · 6 评论 -
【十二】【C++】vector用法的探究
进入调试可以看到变量已经创建成功,里面的具体情况如下图所示。原创 2024-02-08 19:56:06 · 1111 阅读 · 1 评论 -
【十一】【C++】vector类常见用法
是C++标准模板库(STL)中提供的一种序列容器,可以存储任意类型的对象(通过模板参数指定),对象存储在连续的内存空间中。vector提供了动态数组的功能,但比普通数组更灵活、更安全。以下是要使用,需要包含头文件<vector>。原创 2024-02-07 17:14:07 · 1576 阅读 · 1 评论 -
【十】【C++】string类的模拟实现
浅拷贝(Shallow Copy)是对象复制的一种方式,其中复制对象的过程仅仅复制对象的值,而不复制引用所指向的实际对象或数据。这意味着原始对象和拷贝对象会共享相同的引用或指针指向的数据。共享内存:拷贝对象和原始对象共享相同的内存地址指向的数据。快速复制:由于不需要复制引用指向的实际数据,浅拷贝的过程通常比深拷贝更快。潜在风险:如果原始对象或拷贝对象修改了共享的数据,这种变化会影响到另一个对象。这可能导致数据不一致、意外的副作用或内存泄漏等问题。在这个例子中,拷贝构造函数执行浅拷贝,仅复制。原创 2024-02-06 20:26:59 · 1385 阅读 · 1 评论 -
【九】【C++】string练习
给你一个字符串s,根据下述规则反转字符串:所有非英文字母保留在原有位置。所有英文字母(小写或大写)位置反转。返回反转后的s。"dc-ba"仅由 ASCII 值在范围[33, 122]的字符组成s不含'\"'或'\\'isLeeter是一个辅助函数,用于判断给定的字符ch是否为字母(大写或小写)。它通过检查ch是否位于'a'到'z'或'A'到'Z'的范围内来实现这一点。如果ch是字母,函数返回true;否则返回false。函数接受一个字符串s作为参数,返回一个新字符串,其中s。原创 2024-02-05 15:55:34 · 928 阅读 · 1 评论 -
【八】【C++】STL、string类常见用法
STL(Standard Template Library,标准模板库)是C++标准库的一部分,提供了一系列通用的模板类和函数,这些模板类和函数可以用来实现常见的数据结构和算法。STL使得C++程序员能够更高效地编写代码,同时保持代码的可读性和可重用性。容器是用来管理某一类对象的集合。STL提供了多种类型的容器,每种容器都设计用来管理特定类型的对象集合。STL容器分为序列容器和关联容器两大类:序列容器:维护元素的线性顺序。包括vectorlistdequestring等。原创 2024-02-04 14:39:23 · 1230 阅读 · 1 评论 -
【七】【C++】模版初阶
C++中的泛型编程是一种编程范式,它强调代码的重用性和类型独立性。通过泛型编程,你可以编写与特定数据类型无关的代码,使得相同的代码可以用于多种数据类型。原创 2024-02-03 13:56:22 · 1330 阅读 · 1 评论 -
【六】【C++】C++内存管理
什么是内存泄漏:内存泄漏是程序中的一种资源管理错误,发生于当程序分配的内存没有被正确释放回操作系统或可用内存池,即便它已经不再被使用或无法被访问。内存泄漏是动态内存管理中常见的问题,尤其在使用如C和C++这类需要手动内存管理的编程语言时。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,会导致资源浪费、性能下降、系统稳定性降低,最终可能引起程序或系统崩溃,增加维护成本。/*内存泄漏示例*/// 1.内存申请了忘记释放// 2.异常安全问题Func();原创 2024-02-02 09:16:43 · 941 阅读 · 1 评论 -
【五】【C++】类与对象(三)
*初始化列表对于非基本数据类型的优势*/class A {public:{}private:int _a;int& _ref;int c = 20;b.Show();原创 2024-02-01 21:08:18 · 1268 阅读 · 1 评论 -
【四】【C++】日期类简单实现
GetMonthDay函数用来获取指定year和month的天数。首先把一年中每个月的天数放入一个数组中存储,第二月填写28。我们知道闰年的二月是29天,非闰年的二月是28天。也就是一年中除了第二月,其他月份的天数都是固定的。如果我们指定的月份是二月,那么我们就需要在外面再判断一下指定的year是否是闰年,如果是闰年就返回29即可,不是闰年就返回数组中存储的第二月的天数28即可。如果不是二月,直接返回数组中存储的天数即可。原创 2024-01-31 15:44:40 · 1206 阅读 · 1 评论 -
【三】【C++】类与对象(二)
在C++中,有六个默认成员函数,它们是编译器在需要的情况下自动生成的成员函数,如果你不显式地定义它们,编译器会自动提供默认实现。这些默认成员函数包括:默认构造函数 (Default Constructor): 如果你没有为类显式定义任何构造函数,编译器将生成一个无参的默认构造函数。用于创建对象而不需要提供任何参数。析构函数 (Destructor): 如果你没有为类定义析构函数,编译器将生成一个默认的析构函数。用于在对象被销毁时释放资源、进行清理工作等操作。原创 2024-01-30 20:03:10 · 1117 阅读 · 2 评论 -
【二】【C++】类与对象(一)
*3.类的作用域*/public:private:int _age;Person p1;return 0;类和结构体一样可以理解为自定义类型。自定义数据类型。类内的函数不仅可以在类内被实现,还可以在类外面被实现,在类外面被实现时,需要指定这个函数是在哪一个类里面的。在函数名前面添加“类名+::”。类定义了一个新的作用域,类的所有成员都在类的作用域中。原创 2024-01-26 15:15:07 · 862 阅读 · 1 评论 -
【一】【C++】C++入门
*4 引入命名空间*/int data;return 0;namespace+空间名称+{}/*13 缺省参数,缺省参数是声明或定义函数时为函数的参数指定一个缺省值。*///std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中void Func(int a=10){//定义函数时候Func();Func(20);return 0;在函数定义的时候,对参数进行“赋值”,这不是真正的赋值,而是缺省参数的定义。原创 2024-01-22 16:46:49 · 1027 阅读 · 3 评论