- 博客(37)
- 收藏
- 关注
原创 C++之多态
多态就是具有不同的形态;同一个接口,展现出不同的形态举个例子:动物“叫”这个行为,猫叫就是“喵喵喵”,狗叫就是“汪汪汪”,他们都是使用“叫”这个行为。
2024-12-17 13:30:45
919
原创 C++之STL(标准模板库)
我们在实现功能过程中,同样的对象不可能只生成一个,多个的话可以使用数组存储,但是,我们大部分的应用场景都是需要频繁的生成和销毁对象,这就意味着频繁的插入和删除,不仅仅是在后面进行插入和删除,可以是任何位置;
2024-12-15 09:37:40
1424
原创 C++之STL的priority_queue容器
它是一个优先队列,是一个基于优先级堆的容器适配器,底层容器默认使用vector,将vector封装成堆管理元素。默认是使用最大堆。priority_queue是有三个模版参数的1、第一个是class T:表示队列中元素的类型2、第二个是class Container = std::vector:表示底层容器的类型,从中就可以看到,默认是使用std::vector容器。
2024-12-14 12:32:53
391
原创 C++之仿函数
仿函数的一个重要应用场景是与STL算法一起使用,在STL算法中许多算法可以接受仿函数作为参数,从而为算法提供自定义的行为。下面就在std::sort()上使用自定义的仿函数。仿函数本质上是一个类,其中重载了函数调用运算符operator(),当创建这个类的对象时,你就可以像调用函数一样调用它。我想写一篇关于C++中仿函数的文章,上面是我写的内容,你觉得我应该还需要补充什么?3、能与STL算法结合使用,作为回调函数或比较器等。##仿函数的使用场景。
2024-12-14 11:48:48
264
原创 C++之STL的unordered_multimap容器
unordered_multimap是一个关联容器,是基于哈希表实现的,元素不是唯一的,也不是有序的,就是无序的。
2024-12-13 09:45:15
300
原创 C++之STL的multimap容器
multiset是一个关联容器,是基于平衡二叉搜索树(红黑树)实现的,元素是有序的,但是元素不是唯一的,可重复的下面说说multimap与map的区别。
2024-12-13 09:16:34
676
原创 C++之STL的unordered_multiset容器
unordered_multiset是一个集合容器,是基于哈希表实现的,元素不是唯一的,也不是有序的,也就是无序的。
2024-12-12 13:48:15
482
原创 C++之STL的unordered_set容器
unordered_set是一个集合容器,是基于哈希表实现的,元素是唯一的,但是元素是无序的。unodered基本和set的用法差不多,所以可以直接参考set的用法,文章如下。最后给加一个chatgpt中STL的unordered_set的方法回答吧。3、频繁进行集合操作(如交集、并集、差集)时。1、需要快速查找、插入和删除操作时。2、需要去重,保证元素唯一性时。4、存储不关心顺序的唯一元素时。
2024-12-12 12:43:21
423
原创 C++之STL的multiset容器
multiset是一个集合容器,是基于平衡二叉搜索树(红黑树)实现的,元素是有序的,但是元素不是唯一的,可重复的。
2024-12-12 12:02:29
721
原创 C++之STL的deque容器
deque是双端队列,也就是可以在前面进行插入和删除,也可以在后面进行插入和删除,(此处大家不要想歪了)deque不像vector那样,使用连续的内存块,而是有多个小的内存块组成。
2024-12-04 11:41:10
244
原创 C++之重载运算符
前言在C++语言中,官方实现的运算符可以满足我们的很多的需求,但是,为了实现我们各种各样的功能,我们不可避免的需要自己实现运算符的功能,所以,我们需要学会怎么实现运算符的重载。
2024-12-01 14:14:19
876
原创 C/C++之内存管理(malloc、free、new、delete、shared_ptr、unique_ptr)
public:MyClass(){cout << "执行构造函数..." << endl;cout << "执行析构函数..." << endl;return 0;使用new和delete的注意事项有以下方面1、new和delete必须成对使用,new和delete搭配使用,new[]和delete[]搭配使用2、释放内存后,记得将指针置为nullptr,方式悬挂指针。
2024-11-30 19:40:21
1020
1
原创 C/C++之const
1、修饰左值,那么该值变为常量(不懂左值的需要去了解左值概念),这里值修饰全局变量、修饰局部变量、修饰成员变量、修饰函数参数。上面是只加一个const,还可以两个const修饰指针,比如const int* const ptr,代码例子如下。2、修饰成员函数,成员函数里面不能修改对象的值,可以更改不是对象的值数据。指针常量是指指针指向的值是常量,但是可以指向不同的指针,const在。常量指针是指指针本身是常量,但是指针指向的值可以改变,const在。4、修饰数组,数组里面的每个元素不能更改。
2024-11-30 15:34:30
248
原创 C/C++之static
1、static修饰函数的局部变量,变量只在第一次调用是初始化一次,下次调用该函数不会再次初始化static修饰的变量,这个变量的声明周期是整个程序运行期间,作用域只作用于函数内2、static修饰成员变量,需要在类外面初始化,多线程的场景下需要注意竞态问题,在改变变量时需要加锁,static修饰的成员变量在类的所有实例中是共享的,不依赖类的实例3、静态成员函数没有this指针,不能访问任何非静态成员,因为static修饰的没有与特定的对象实例绑定。
2024-11-30 13:13:56
384
原创 C++面试题
(1)重复定义:如果多个源文件都包含了该头文件,那么每个源文件都会有一份全局变量的定义,这会导致重复定义的错误。在链接阶段,编译器会报错,提示重复定义的问题。(2)跨文件命名冲突:如果多个头文件中都定义了同名的全局变量,那么在包含这些头文件的源文件中,会出现命名冲突的问题。这会导致编译错误,因为编译器无法判断使用哪个全局变量。(3)编译时间增加:如果全局变量的定义放在头文件中,每次包含该头文件时,都会将全局变量的定义复制到源文件中。
2023-10-26 17:40:35
149
1
原创 从尾到头打印链表
输入一个链表的头结点,从尾到头反过来打印出每个节点的值。笔者的思路是把链表从头到尾节点的值放进栈里面,然后出栈打印;空间效率为O(n),时间效率为O(n);
2023-08-30 09:41:40
130
1
原创 替换空格字符
形参可以使用指针形式,但是实参必须使用数组形式,并且替换之后不会越界。上面代码的问题1.没做防御性,2.应该使用数组,但是使用了指针。笔者的代码:代码是有报错的。
2023-08-29 19:01:45
44
1
原创 二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。这道题就考察观察数组的规律。根据规律很容易知道从左下方或者右上方开始查找的话,效率快很多。
2023-08-29 17:30:45
108
1
原创 数组中重复的数字
笔者的思路:1.如果使用暴力的话,时间效率为O(n*n) 2.如果先排序的话(排序的时间效率为O(nlogn),接着使用双指针,时间效率为O(n)) 3.可以使用哈希表,分配数组大小为n的空间,所以空间效率为O(n),在哈希表查找的时间效率为O(1),所以整体的时间效率为O(n)这种方法是改动了原来数组的数据,你们要基于是否可以改而决定能不能使用这个方法;至于书本的源代码,你们就自己买书看吧,笔者觉得书挺不错的。这个方法空间效率是O(1),时间效率为O(n)。按照书本作者的思路笔者写的代码。
2023-08-29 16:11:57
62
1
原创 实现单例模式
笔者之前一直以为这是线程不安全的,但今天发现这已经是线程安全的了,并且使用懒汉式,不像饿汉式那样没有用到也占用着资源,造成资源浪费。欢迎大家指出来文章的错误,或者可以基于文章的信息对我提出问题。1.请实现一个多线程编程。
2023-08-29 15:20:07
47
1
原创 添加赋值运算符函数
不可以是值传递,值传递的话,从实参到形参会发生拷贝构造函数的调用;而前面的拷贝构造函数的调用又因是值传递而发生拷贝构造函数的调用;这样就进入无底洞的递归了;malloc/free为函数只是开辟空间并释放,new/delete则不仅会开辟空间,并调用构造函数和析构函数进行初始化和清理。new/delete底层是基于malloc/free来实现的,而malloc/free不能基于new/delete实现;这样会先调用拷贝构造函数,然后才调用赋值运算符函数,造成不必要的消耗;如:st3 = st2 = st1;
2023-08-29 14:53:40
69
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人