自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 C++继承学习笔记

有了多继承,就存在菱形继承,有了菱 形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。语义不同:继承是"我是",组合是"我用"耦合度不同:继承是白盒(知道内部),组合是黑盒(只知接口)灵活性不同:继承关系编译时固定,组合可以运行时改变演化能力不同:继承链难改,组合部件易换测试难度不同:继承难测,组合易测(可mock)

2025-12-20 11:59:55 742

原创 C++模板学习笔记

本文摘要:C++模板编程中需要注意typename和class的区别,typename用于明确告知编译器某成员是类型。模板参数包括类型和非类型参数(仅限整型)。模板特化分为函数特化(不推荐)和类特化(全特化/偏特化),偏特化又分为部分参数特化和参数模式特化。模板类存在分离编译问题,解决方法包括显式实例化或将声明定义放在同一文件中。合理使用模板特化和编译技巧能提高代码的灵活性和效率。

2025-12-10 21:13:15 307

原创 模拟实现优先队列和反向迭代器的个人总结

摘要:本文探讨了优先队列实现中的关键设计选择。优先队列使用索引而非迭代器访问元素,因其要求容器支持随机访问(如vector),且索引操作更高效。文章分析了优先队列模板的三个参数作用,解释了堆调整算法的设计原理(向下/向上调整),并对比了仿函数与函数指针的实现优劣。此外,还讨论了反向迭代器的实现机制,包括其与正向迭代器的关系及操作符重载的注意事项。最后指出了一些常见编程陷阱,如size_t在循环中的使用风险、swap的实现原理等。这些设计考量体现了STL容器在性能、泛型编程和安全性的平衡。

2025-12-06 19:07:11 750

原创 C++栈和队列的模拟实现和练习题总结

把数组中的字符一个个插入到栈里面,发现要插入的是运算符的时候就直接从栈里面出两个数进行相应的运算再推回栈里面,由于没办法把字符的运算符直接变成有实际效应的运算符,所以只能用四个条件判断来运算。deque是一个集合了vector和List优点(以及缺点)的容器,成员也大差不差,这里作为定义stack的默认值,也可以自行定义stack中的元素用什么来存储,见下面的例子。这道题犯了没想清楚就开始敲代码的错,然后写的过程中改了又改,第一个通过的版本也是惨不忍睹,加了一堆的判断条件和多了个冗余的循环。

2025-11-28 14:45:49 328

原创 List模拟实现和个人问题总结

我们知道iterator应该有const和非const之分,分别供const list和list使用,那我们难道写两个iterator类吗?其实只需要在List里面用好typedef就可以了直接定义成iterator和const iterator,不怕混合需求吗?如List_Iterator<const T, T&, T*>const_iterator;不可能,因为当我们定义一个选择传递一个constiterator的begin的时候,就已经确定了不会对其内容进行任何的修改。

2025-11-24 18:24:57 505

原创 String的模拟实现以及个人问题总结

主要成员。

2025-11-19 19:48:39 909

原创 vector模拟实现及个人问题总结

因为迭代器不一定是T,假如vector里面存的是int,T就是int*,但是我在构造的时候想把给double传给类型传给这个vector,一般情况下,double类型是可以隐式转化为int类型的,只是精度会降低。比如调用insert时,给定一个pos定位原对象空间的某个位置,准备插入时发现空间不够,于是创建了一个新的空间,此时Pos并没有指向新空间对应的位置,对pos进行赋值是没有意义的。,有可能产生其他的效果。,但是当有模板构造函数时,模板构造函数的匹配程度更高(因为不需要类型转换,两个参数都是。

2025-11-19 18:58:31 669

原创 Linux操作系统入门之常见指令

(2)在Xshell新建或点进任意文件,新建文件的时候在主网那里输入得到的ip地址,则可以自动弹出登陆窗口,若没有输入,在文件中输入ssh+ip就是连接服务器,然后选择登陆的用户,一开始只能登陆root用户,后续可用root用户创建其他用户。cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。-p, --parents 可以是一个路径名称。第一列是指文件的类型,“d”是目录,“-”是普通文件“.”是隐藏文件。

2025-09-06 10:25:12 465

原创 C++动态内存管理 &&模板

3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可, 如果是多个对象,[]中指定对象个数即可。malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。6. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后。5. malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常。

2025-09-02 18:34:41 863

原创 C++类和对象

默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。

2025-08-08 06:39:57 951

原创 C++学习(语法篇)

C++基础语法学习

2025-07-06 17:20:25 1564

原创 数据结构学习:排序

1.已知一个算法时间复杂度最低的情况,那么就尽量让这种情况发生(如本文的希尔排序,正是尽可能让插入排序往n的量级去靠)2.和1类似,逆向思考,已经达到了较好的时间复杂度,那就避免坏情况的发生(如快速排序的三数取中法)3.利用/避免偶然情况,如快速排序的随机取数,不一定会优化时间复杂度,但是很好地避免了整段或某段区间正序/逆序的极端情况(可以试想一下对一个完全有序的数组进行快排简直是灾难)

2025-06-18 20:04:02 1863

原创 数据结构学习:二叉树

向下调整,从最后一个子树开始往前向下调整(一层层调好),保证每次向下调整时左右子树都是堆(向上和向下都是要满足这个条件的,刚刚向上调整也是相当于一层层调成了堆)(n,直觉上市n*logn,用错位相减法证明,直接想的话,因为向下调整忽略最后一层,向上调整忽略第一层,明显数量上差距就很大;根节点一定是最大的,因此让根节点和末尾节点交换,交换后的根节点向下调整,再次将第二大的数置于根节点,同时末尾节点必然不会动(第一大)。先一直走左孩子,当前的左孩子没有孩子时走其右兄弟,走完后再走自己的右兄弟,即可保证走完。

2025-05-07 18:37:23 1882

原创 利用qsort函数实现对结构体数组的排序

两点需注意:由于name是字符串数组,在比较时正好可以用上strcmp(返回值正好契合了qsort需要的返回值)此外,需要注意(inf*)a后面不能直接跟->,不然a会先于->结合导致错误。而con->data会根据名字大小以一个inf结构体为单位进行排序。qsort中的参数compare函数的两个参数必须是name,而由于compare的默认参数类型是const void*,必须强制类型转换。利用qsort的一个大前提是得给他一个数组,因此设置了set结构体,将inf类型变量放入一个数组中。

2024-11-10 14:03:39 242 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除