
C++
文章平均质量分 84
C++学习
我爱吃福鼎肉片
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C++】——多态
必须通过基类的指针或者引用才能调用虚函数,这是因为只有基类的指针或引用能够同时指向基类和派生类的对象,从而实现多态的效果。被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。1public:virtual void BuyTicket() // 虚函数cout << "全价票" << endl;public:virtual void BuyTicket() // 虚函数重写cout << "半价票" << endl;原创 2024-09-19 16:57:07 · 853 阅读 · 3 评论 -
【C++】——优先级队列和容器适配器
stack是一种后进先出的特殊线性数据结构,因此只要具有push_back()和pop_back()操作的线性结构,都可 以作为stack的底层容器,比如vector和list都可以。queue是先进先出的特殊线性数据结构,只要具有 push_back和pop_front操作的线性结构,都可以作为queue的底层容器比如:list。优先级队列是一种特殊的队列,他的元素出队列顺序并不按照先进先出原则,而是根据元素的优先级来。deque容器是什么,stack和queue为什么在底层设计时用deque来实现?原创 2024-09-17 17:59:41 · 878 阅读 · 3 评论 -
【C++】——set和map的使用
multimap的find返回底层搜索树中序的第一个值为key的元素的迭代器,而map返回的是key元素的迭代器。并且由于multimap支持键值冗余,所以其成员函数没有[]运算符重载,因为一旦键值冗余,根本不知道该返回哪个键值的value。从返回结果中还可以看出:无论插入成功还是失败,都会返回指向key的迭代器,那么就意味着,insert不仅仅可以插入,还有查找功能。类似这样,把两个值传给pair,pair再自己构造一个匿名对象进行返回,所以可以省略参数类型。需要注意的是,有两个pair,一个是。原创 2024-09-24 16:14:55 · 953 阅读 · 5 评论 -
【C++】——红黑树
在我的上篇博客中介绍了AVL树,红黑树其实就是在AVL树的基础上进行改进的。红黑树的特点每个节点不是黑色就是红色根节点是黑色如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是⿊⾊的,也就是说任意⼀条路径不会有连续的红⾊结点。对于任意⼀个结点,从该结点到其所有NULL结点的简单路径上,均包含相同数量的⿊⾊结点空节点NIL(取自算法导论NIL)一定为空节点,或者直接称为NULL节点满足以上性质,就能保证最长路径不会超过最短路径的两倍,以达到接近平衡状态,能够减少旋转效果。原创 2024-11-01 20:45:57 · 947 阅读 · 6 评论 -
【C++】——哈希
哈希是一种特殊的存储结构,该结构能够通过某种函数使元素的存储位置与它的关键码之间能够建立映射的关系。哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(散列表)。原创 2024-11-07 17:23:55 · 1087 阅读 · 6 评论 -
【C++】——用哈希封装unordered_set和unordered_map
在迭代器中应该有两个参数,一个就是节点指针,另一个就是我们的哈希表的指针,因为我们可能需要遍历哈希表的下一个桶的位置。为了同时支持const迭代器与普通迭代器,我们需要三个模版参数,第一个模版参数T代表数据存储类型,第二个模版参数Ref代表存储类型的引用,第三个模版参数Ptr代表存储类型的指针。我们的比较除了用仿函数替换以外,以及需要将key通过对应的转换函数转换以外,还需要将返回值改造了,返回值是pair类型,第一个参数是迭代器,第二个是bool值。为了更加灵活,我们把哈希表的模版参数定义为T。原创 2024-11-09 20:21:13 · 442 阅读 · 5 评论 -
【C++】——AVL树
插入数据要更新平衡因子,如果高度差大于一,就需要通过旋转平衡。和二叉搜索树相似,AVL树多了一个平衡因子。AVL树是在平衡二叉树的基础上改进的。原创 2024-10-09 19:31:44 · 581 阅读 · 3 评论 -
【C++】——继承与虚继承
下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以既叫基类/派⽣类,也叫⽗类/⼦类)继承基类成员访问⽅式的变化基类的private成员只是不可访问,但是派生类还是得到了继承public和protected的区别public:protected:public:// 可以访问基类的public成员// 可以访问基类的protected成员Derived d;// 正确:可以通过Derived实例访问public成员。原创 2024-09-18 21:15:22 · 1015 阅读 · 0 评论 -
【C++】——list
在C++中,list是一个带头双向链表。原创 2024-09-16 22:02:21 · 878 阅读 · 4 评论 -
【C++】——二叉树搜索树
【代码】【C++】——二叉树搜索树。原创 2024-09-16 19:36:29 · 468 阅读 · 2 评论 -
【C++】——初识模版
/为每一个类型都编写一个重载版本这种方法的缺点是显而易见的:随着需要交换的类型的增加,你需要不断地编写新的重载函数。这不仅繁琐,而且不灵活,因为它不能自动适应未来可能出现的新类型。函数模板提供了一种更加灵活和通用的解决方案。你可以定义一个模板函数,该函数可以接受任意类型的参数,并在编译时根据传入的参数类型生成相应的函数版本。原创 2024-07-23 16:00:47 · 812 阅读 · 15 评论 -
【C++】——vector模拟实现和迭代器失效问题
插入元素:在vector末尾插入元素,除了指向最后一个元素的迭代器以外,其他迭代器依旧有效如果在其他位置插入,则指向该插入位置的迭代器和其之后的所有迭代器失效删除元素:删除元素后,被删除和删除之后的所有迭代器都会失效重新分配:当vector的大小超过当前容量时,它可能分配需要更大的空间进行存储元素,这种重新分配会导致所有迭代器、指针、引用失效注意:vector的迭代器失效也和编译器环境有关,有关指报错和运行。原创 2024-09-13 18:26:05 · 599 阅读 · 3 评论 -
【C++】——类和对象(上)
类是一个用户定义的类型,它封装了数据(称为属性或成员变量)和操作这些数据的方法(称为成员函数或方法)。类可以看作是创建对象的蓝图或模板,它定义了对象的行为(能做什么)和状态(有什么)。C++中的类和C语言中的结构体struct是非常相似的,C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比方说我创建栈(stack)和队列(list),在c语言中,他们的定义必须分开,否则编译器就无法判断他们同一功能的同名函数到底谁是谁的push,谁的top等等…原创 2024-07-15 16:22:10 · 926 阅读 · 5 评论 -
【C++】——string(模拟实现)
这篇博客中构造、拷贝构造、析构、还有一些短小频繁调用的函数就不用做函数和定义分离,因为在类中,这种函数会默认是内联函数。原创 2024-09-11 16:01:30 · 780 阅读 · 4 评论 -
【C++】——new和delete
new会自动调用构造函数delete会自动调用析构函数new和delete不同的是:new/delete申请和释放的是单个元素空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc则是返回NULLfree和malloc不会调用析构函数和构造函数,所以new和delete主要使用在自定义类型。原创 2024-07-21 21:17:02 · 833 阅读 · 10 评论 -
【C++】——vector
vector是一个动态数组,可以根据需求变大变小vector支持随机访问vector会自动管理内存分配和释放vector在尾部添加和删除的效率非常高,中间和头部插入较慢,因为内存是连续的,除了尾部的增删以外都需要挪动被处理数据之后的全部数据。原创 2024-09-12 19:23:02 · 621 阅读 · 4 评论 -
【C++】——类和对象(中)
3.没有显式实现时,编译器会自动生成一个默认赋值运算符重载,默认赋值运算符重载行为跟默认拷贝构造函数类似,对内置类型成员变量会完成值拷贝/浅拷贝(一个字节一个字节的拷贝),对自定义类型 damen成员变量会调用他的拷贝构造。赋值运算符重载是一个默认成员函数,用于完成两个已经存在的对象直接的拷贝赋值,这里要注意跟拷贝构造区分,拷贝构造用于一个对象拷贝初始化给另一个要创建的对象。通过使用引用,特别是常量引用,我们避免了这种递归调用,因为引用只是对象的别名,不需要创建对象的副本。希望这篇博客对你有所帮助!原创 2024-07-15 22:18:19 · 1066 阅读 · 8 评论 -
【C++】——类的对象(下)
因为那些你不在初始化列表初始化的成员也会走初始化列表,如果这个成员在声明位置给了缺省值,初始化列表会用这个缺省值初始化。如果你没有给缺省值,对于没有显示在初始化列表初始化的内置类型成员是否初始化取决于编译器,C++并没有规定。对于没有显示在初始化列表初始化的自定义类型成员会调用这个成员类型的默认构造函数,如果没有默认构造会编译错误。每个成员变量在初始化列表中只能出现一次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地方。,跟成员在初始化列表出现的的先后顺序无关。希望这篇博客能帮助到你!原创 2024-07-19 16:11:37 · 788 阅读 · 15 评论 -
【C++】——入门基础
const引用是一种特殊的引用,它允许你引用一个对象但不允许通过这个引用来修改该对象的内容。函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。函数重载的主要目的是让同一个函数名能够根据不同的参数类型或数量执行不同的功能,这样既可以提高代码的可读性,又可以让函数调用更加灵活。权限可以缩小,不能放大。原创 2024-07-14 21:05:14 · 1177 阅读 · 8 评论