- 博客(14)
- 收藏
- 关注
转载 关于c++模板参数的详细介绍
/类似静态栈这样:需要固定大小的数组,但具体大小是多少又不确定private:T _a[N];int _top;我们将N这个整型变量当成模板参数去使用,方便的实例化出大小不同的数组。这样,当我们还需要类中大小为100的数组时,可以通过模板参数确定即可。①模板复用代码,STL产生,大大方便了使用。②增强了代码的灵活性,适配器,仿函数产生。
2025-06-19 22:52:45
44
转载 反向迭代器的实现及介绍
反向迭代器是对普通迭代器的一种封装,它通过将普通迭代器的移动方向反转来实现反向遍历。对于支持双向迭代器(如 std::list 、 std::vector 等容器的迭代器)或随机访问迭代器(如 std::vector 、 std::deque 等容器的迭代器)的容器,都可以获取其反向迭代很好理解,反向迭代器通过对正向迭代器的重新封装,完成需求。但具体是如何封装的呢?
2025-06-19 22:50:55
15
转载 以优先队列模拟实现介绍仿函数
尽管叫做队列,实际和队列并没有太大关系。它利用堆的方式来对数据进行管理,而堆储存数据的方式采用直接复用vector/list等的结构,这就是一种容器适配器。堆的结构及使用(介绍增删,查和改涉及到知识较多,之后写在别的文章里)、仿函数反向迭代器。定义- 仿函数(Functor),也叫函数对象(Function Object),是一个能像函数一样被调用的对象。它本质上是一个重载了 () 运算符(函数调用运算符)的类的实例。
2025-06-19 22:49:28
8
转载 二叉树及建堆的详细介绍
1.调整方向- 向上调整建堆:从最上的叶子节点开始,将每个节点与其父节点比较交换,直到根节点或满足堆的性质。- 向下调整建堆:从最下的根节点开始,与它的左右子节点比较交换,不断向下调整,直到叶子节点或满足堆的性质。2.时间复杂度(向下调整建堆更优)-向上:O(N*logN)-向下:O(N)原因:二叉树最后一层占了几乎一半节点,从下向上调整节点数少,次数少,而从上向下,最后每个节点都要处理,调整次数多(不具体证明了)3.适用场景。
2025-06-19 22:47:09
9
转载 详细介绍list的模拟实现及特点
在数据结构中,有一种链表结构是带哨兵位的头节点,其每一个节点都有一个指向上一个节点的指针以及指向下一个节点的指针,从而形成一种环状结构。STL中list就采用了带头双向循环链表的结构,弥补了(vector)连续空间的结构不适于对中间数据频繁插入删除的缺点。
2025-06-19 22:43:23
9
转载 c++模板简单介绍
类似这种情况,这种重复编写代码的方式不仅繁琐,而且不利于代码的维护和扩展。如果有更多的数据类型需要交换操作,代码量会急剧增加。的理念开始兴起——将算法中的数据类型参数化,使得同一个算法可以应用于多种数据类型。而模板正是实现泛型编程的关键机制。早期的编程中,程序员常常会遇到这样的情况:编写的算法逻辑完全相同,但仅数据类型不同。与函数模板的使用基本一致,只需要知道当使用了模板参数之后,此时就会想:是否能创建一种能够。
2025-06-19 22:40:36
9
转载 C++内存管理
这里还需要介绍一个问题:为什么new时先开空间再掉构造,而delete时先调析构再释放空间?new和delete是关键字,而malloc 和 free则是函数;malloc不会初始化,在开辟自定义类型空间时也不会调用构造;new开空间部分由malloc实现,另外还会调用构造函数(且允许初始化);在使用上:malloc函数的返回值是void*类型,所以我们在调用malloc后需要强制类型转换,同时malloc是按字节开辟大小,传参时需要我们自己计算需创建多大的空间;而new只需要直接跟类型。
2025-03-14 08:58:59
31
转载 怎样能在类外函数中访问类的私有成员?
当我们创建了一个类,又想在类外的函数中使用类的私有成员应该怎么办?在这段代码中,我们又写一个公有的成员函数,间接得到成员变量的值(即将private中需要被访问的数据弄成一个返回值 ),但这种在Java中更为常用;在c++中,我们通常会使用另一种方法:友元函数。
2025-03-14 08:58:05
122
转载 c++拷贝构造函数
用一个已经存在的对象去初始另一个新对象;拷贝构造函数是类中默认成员函数之一,它只有单个形参,且形参是本类类型对象的引用(一般用const修饰,不能改变已存在的类),在用已知类创建对象时,编译器会自动调用拷贝构造函数。(关于默认成员函数)拷贝构造函数是构造函数的一个重载形式,它一定是用来初始化一个新对象的,这区别于赋值重载函数 (将一个对象的值赋值给另一个已经存在的对象);1.关于构造函数,还有一点需要我们注意:拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,因为会引发
2025-03-11 11:05:57
48
转载 c++构造函数
+_scount;private://只是声明//声明和定义分离//static成员变量再类外定义A a1, a2;A a3(a1);
2025-03-11 11:04:35
99
1
转载 c++空类中真的什么都没有吗?
一旦自己写了析构函数,编译器就不会再生成默认析构了(析构函数不能重载),但会自动调用。(1)参数为 const A& 传引用提高效率(2)返回类型 A& 为了支持连续赋值(3)可以检测是否是自己给自己赋值 if(this == &a)(4)返回 return *this;(5)生成的默认赋值重载函数只能实现浅拷贝(也就是逐字节的拷贝),为了避免在某些情况下两个指针(成员变量)指向同一块空间,当有动态开辟空间是等等一些情况下,我们需要自己显式定义赋值重载函数。
2025-03-11 11:02:21
59
转载 c++类和对象
比如说我们要背单词,那我们需要什么?可能首先会想到以下这种结构:将一件事分成几个大的部分(对象),这种解决问题的方式就可称之为面向对象;但如果我们再把步骤细化:每个对象中还包含着许多小的步骤,如果是具体的面向每一个小的步骤解决问题,这种方式称之为面向过程;当我们使用c语言时,有一种自定义类型--结构体,那时我们只在结构体内定义变量,而在c++中,struct中还可以定义函数;
2025-03-11 11:00:18
31
转载 为什么要写using namespace?
在代码不是很复杂的时候是一种很方便的方式,但这种方式也将命名空间std中的内容全部展开,那么之后如果我们定义了一个函数与std中函数名称相同,一样会产生命名冲突的问题,namespace也就失去了它本身的意义;随着程序规模的扩大和代码库的增多,不同库或模块定义相同名称的变量、函数、类等标识符的可能性大大增加。的函数,那么当我们将这两个库引入同一个程序,编译器无法识别我们要用的print是哪一个,我们不得不将其中一个print改名。为了解决这种不必要的麻烦,using namespace关键字出现了--
2025-03-11 10:55:51
26
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人