- 博客(20)
- 收藏
- 关注
原创 C++ set和map了解
set是按照特定顺序存储唯一元素的容器。set中元素的值在容器中不能修改一次(元素始终是const),但可以从容器中插入或删除。map中存放的是真正的键值对<key,value>,set中只存放key,set和map底层都是用红黑树来实现的set中的元素不可以重复(因此可以使用set进行去重)T: set中存放元素的类型Compareset中元素默认按照小于来比较Allocset中元素空间的管理方式,使用STL提供的空间配置器管理。
2024-10-31 14:45:59 675 1
原创 二叉搜索树了解和实现
要删除节点3,找左子树中最右的那个结点2替换3结点再将2结点删除 或者 找右子树最左的结点4替换节点3再删除节点4——替换删除,让操作变成上面两种情况。对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二 叉搜索树的深度的函数,即结点越深,则比较次数越多。以词库中所有单词集合中的每个单词作为key,构建一棵二叉搜索树在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。删除节点4,让父亲节点6的左指针指向节点4的左孩子或者右孩子(4的左右孩子都为空)
2024-10-13 14:53:16 845 1
原创 C++多态
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生 类才能实例化出对象。
2024-10-08 20:13:07 648
原创 C++中的继承
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类(子类)。继承呈现了面向对象程序设计的层次结构。继承是类设计层次的复用。public:protected:// 姓名// 年龄protected:int _stuid;// 学号protected:int _jobid;// 工号学生和老师类都继承了Person类Person是父类,也称作基类。Student是子类,也称作派生类。
2024-10-05 16:06:03 958
原创 了解vector并简单实现
如图:size = _finish - _start;_start指向起始位置,_finish指向size位置,_end_of_storage指向capacity位置。对于一些方法,大家可以自己下去尝试使用,这里就介绍一下,后面进行模拟实现,没提及的就不是重点。erase:删除position位置的数据,返回删除位置的下一个元素的迭代器。insert:在position之前插入数据,返回新插入元素位置的迭代器。pop_back:尾删。
2024-09-23 19:31:49 947
原创 模版初步了解
比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<> 中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。2. 代码的可维护性比较低,一个出错可能所有的重载均出错。,对于模板函数的使用,
2024-05-22 15:16:09 270
原创 C/C++内存管理
new/delete 和 malloc/free最大区别是:new/delete对于【自定义类型】除了开空间,还会调用构造函数和析构函数new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理。
2024-05-21 16:37:06 544 1
原创 C++类和对象(中篇3完)
还需要自己实现吗?当然像日期类这样的类是没必要的,但对于Stack类等涉及资源管理就必须要实现(这里跟拷贝构造类似)注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需。const对象不可以调用非const成员函数。非const对象可以调用const成员函数。修饰类成员函数,实际修饰该成员函数。这两个默认成员函数一般不用重新定义。,表明在该成员函数中。
2024-05-08 09:41:51 365
原创 C++类和对象(中篇1)
无参的默认构造函数这里把自己显示写的构造函数注释了,在main中创建对象没有报错,下面我们把我们显示写的构造函数放开这里就出错了,Date d1;这里创建对象时调用的是无参构造函数,这里我们显示写了有参的构造函数,编译器就不会默认生成无参构造函数,所以这里找不到无参构造函数就会报错。我们可以在写一个无参构造或用我们前面的知识缺省参数来解决(推荐缺省参数方法)注意:这个类中相当于有两个无参构造函数,Date d1;这个不知道调用无参构造函数,还是缺省构造的函数,调用不明确,所以报错。
2024-04-23 10:51:35 1820
原创 C++类和对象(上篇)
class为定义类的键字className为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。接下来我们来看看类的定义不知道各位是否注意到了类的成员变量前面都有一个_,那为什么要这样写呢所以为了区分这样保留了代码可读性,也实现了初始化以上类的定义还差点意思,我们要先了解访问限定符封装、继承、多态。在类和对象刚开始阶段,主要是研究类的封装特性,那什么是封装呢?
2024-04-21 11:53:38 810 1
原创 C++入门开始(第三部分)
C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto 的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编 译期会将auto替换为变量实际的类型。
2024-04-05 22:59:40 1915 1
原创 堆排序的实现+应用
建堆消耗时间K,后面剩余N-K个数据与堆顶进行比较,假设后面剩余的每一个元素都与堆顶进行交换,然后向下调整到完全二叉树的最后一层(向下调整到最后一层时间复杂度为logK(树的高度))这个是造数据的代码,数据存入data.txt这个文件中(这个利用文件指针写入数据,看不懂也没太大关系,知道这个函数的作用就行)将剩余N-K个元素依次与堆顶元素比完之后,堆中剩余的K个元素就是所求的前K个最小或者最大的元素。如果有一个关键码的集合K = { , , ,…前k个最大的元素,则建小堆(大的数据会往下沉)
2024-04-04 18:21:01 633 1
原创 C++入门开始(第一部分)
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。这样就避免了冲突// 变量// 函数// 类型int data;int main()// 特别注意创建结构体变量使用方法return 0;
2024-03-28 22:25:28 542 1
原创 简易版扫雷(数组和函数实践)
根据以上分析我们定义一些常量,后面函数会用这些,后面忘了可以回来看看// 显示出的行// 显示出的列// 实际的行// 实际的列// 地雷个数。
2023-12-15 09:22:09 212
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人