
C++
白小白的学习笔记
这个作者很懒,什么都没留下…
展开
-
C++普通函数与函数模板的区别
总结:建议使用显示指定类型的方式,调用函数模板,因为可以自己确定通用类型T。原创 2023-12-08 15:25:01 · 347 阅读 · 0 评论 -
C++ stack容器讲解 全网最详细!!!!
(First In Last Out,FILO)的数据结构,它只有一个出口。栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为。功能描述:栈容器常用的对外接口。栈中进入数据称为 —栈中弹出数据称为 —原创 2023-12-10 17:40:29 · 439 阅读 · 0 评论 -
C++ deque容器讲解 全网最详细!!!!
中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间。,维护每段缓冲区中的内容,缓冲区中存放真实数据。原创 2023-12-10 12:04:42 · 444 阅读 · 1 评论 -
C++ String基本概念 全网最详细!!!
string 类内部封装了很多成员方法例如:查找find,拷贝copy,删除delete 替换replace,插入insertstring管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。原创 2023-12-09 11:23:11 · 385 阅读 · 1 评论 -
C++ Vector容器 全网最详细!!!!!
/自定义数据类型public:mAge = age;//存放对象//创建数据it!= v.end();it++) {//放对象指针//创建数据it!= v.end();test02();return 0;原创 2023-12-08 16:12:16 · 402 阅读 · 0 评论 -
C++函数模板的使用:一个简单例子
C++另一种编程思想称为,主要利用的技术就是模板。原创 2023-12-08 15:15:00 · 434 阅读 · 0 评论 -
C++多态:面向对象三大特性之一
这里通过基类指针可以很方便地遍历多种类型的员工,运行时会根据实际对象类型调用他们各自的pay方法实现,无需员工类型判断,这样实现灵活多变。通过这种方式, DoSpeak函数可以适用于任何继承自Animal的对象,都会调用对应的speak实现。这种基于多态实现的图形编程架构也非常常见,可以方便新增更多类型的图形,而不影响已有代码。这个代码通过动物、猫、狗的类层次结构,很好地展示了C++多态的使用方式和效果。这里通过定义一个基类Shape,然后矩形类,圆形类继承实现自己的draw方法。原创 2023-12-08 11:17:47 · 405 阅读 · 0 评论 -
C++中struct和class区别是什么?
在C++中 struct和class唯一的。原创 2023-12-08 10:48:00 · 353 阅读 · 0 评论 -
C++封装:面向对象三大特性之一
*示例2:**设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号。类在设计时,可以把属性和行为放在不同的权限下,加以控制。 在设计类的时候,属性和行为写在一起,表现事物。**示例1:**设计一个圆类,求圆的周长。封装是C++面向对象三大特性之一。原创 2023-12-08 10:46:22 · 403 阅读 · 0 评论 -
C++继承:面向对象三大特性之一
从基类继承过过来的表现其共性,而新增的成员体现了其个性。一类是从基类继承过来的,一类是自己增加的成员。A 类称为子类 或 派生类。B 类称为父类 或 基类。原创 2023-12-08 10:42:14 · 360 阅读 · 0 评论 -
int middle = left + ((right - left) / 2);有防溢出作用?为什么啊啊啊啊?
所以这种计算中间索引的技巧可以很好地防止整数溢出的风险。主要原因是使用了除法而不是乘法,并且进行了合理的约束和类型转换。这在二分查找算法中计算中间索引时是一个常见且安全的做法。综上,使用乘法计算中间索引可以避免除法的截断错误,但需要注意溢出问题。使用除法运算 (right - left) / 2 而不是乘法来计算中间索引。中间索引一定在 left 和 right 之间,所以不太可能溢出 int 范围。用一个表达式计算中间索引而不是分步计算,可以最小化溢出的机会。使用位运算和分步计算来避免溢出。原创 2023-12-08 09:44:40 · 860 阅读 · 0 评论 -
LeetCode:18. 四数之和:一个小小的需要注意的点!
题意:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]在四数之和计算时,四个元素的绝对值之和可能会超过int的范围,导致加法溢出变成负数。原创 2023-12-08 09:13:00 · 395 阅读 · 0 评论 -
C++中单链表ListNode的三种构造函数实现
ListNode(int x, ListNode *next) : 使用给定的值x和next节点构造ListNode,val初始化为x,next初始化为给定的next。ListNode(int x) : 使用给定的值x构造ListNode,val初始化为x,next初始化为nullptr。所以这三种构造函数的实现,允许了ListNode对象多种形式的创建和组装,使单链表的使用和操作更加方便。ListNode() : 默认构造函数,将val初始化为0,next初始化为nullptr。原创 2023-12-08 09:05:27 · 1130 阅读 · 0 评论 -
一个例子:C++中的以字符串为键,整数为值的unordered_map
这个示例演示了unordered_map的基本用法,包括插入、查找、遍历和删除数据。键是字符串,值是整数。可以根据需要修改键值的类型。原创 2023-12-07 23:47:51 · 497 阅读 · 0 评论 -
C++中unordered_map用法,全网最详细!!!
所以unordered_map通过哈希表实现,提供了快速的查找和插入,但元素的遍历顺序是不确定的。需要包含头文件才能使用。其中Key是键的类型,Value是值的类型。原创 2023-12-07 23:44:48 · 1389 阅读 · 0 评论 -
C++向函数传递参数的三种方式各有什么区别?最详细解答!!!
所以,传值用于单向数据传输,传引用/指针用于需要双向交互的场景。选择何种方式要根据实际需求决定。让形参作为实参的别名,形参和实参指向同一块内存,对形参的修改会改变实参。将实参的地址传递给指针形参,可以通过解引用指针来改变实参的值。传引用和传指针地址都允许函数内部修改外部实参的值。将实参的值复制一份传递给形参,不会影响到实参。传指针允许对指针自身的操作,和传引用相比更灵活。传引用简单而安全,避免了指针操作中的一些陷阱。C++向函数传递参数的三种方式各有什么区别。2.传引用和传指针都可以改变原变量。原创 2023-12-07 23:34:14 · 573 阅读 · 0 评论 -
为什么C++不能返回局部变量的引用,最详细解答!!!!!
在这里,x是badFunc()函数的一个局部变量,在函数返回后就被销毁了。但是返回了x的引用,这个引用ref就成为了一个无效的"悬空引用"。3.这样就出现了一个引用指向的内存已经被释放的非法引用。因此C++通过规则规定不能返回局部变量的引用和指针,来防止这种情况的出现,保证引用在使用时都是有效的。所以正确的做法是返回一个静态变量或者堆内存中的对象的引用,其生命周期不受函数影响。今天发现了一个问题,为什么C++不能返回局部变量的引用?2.但是引用的生命周期会延续到调用的上下文环境中。原创 2023-12-07 23:32:22 · 1225 阅读 · 0 评论 -
C++冒泡排序的实现
将数组 { 4,2,8,0,5,7,1,3,9 } 进行升序排序。最常用的排序算法,对数组内元素进行排序。冒泡排序是最常用的算法。原创 2023-12-07 23:28:30 · 431 阅读 · 0 评论 -
一个容易被忽视的问题:system(“pause“)和return 0是做什么的
所以在C/C++中,main函数通过return 0来表示执行成功退出。以上是C++代码的经典main函数,结尾的system(“pause”)更是司空见惯,但是作用是什么?system(“pause”)这行代码的作用是在程序执行结束之前暂停,弹出一个提示供用户按任意键退出。所以return 0很重要,表示程序执行流程顺利,这是一个C/C++开发中非常基本也很重要的细节!所以这只是一个让程序执行停顿一下的小技巧,方便用户查看结果,不是C++语法必需的部分。2.返回的值0表示程序正常执行完毕,退出代码为0。原创 2023-12-07 23:25:38 · 1910 阅读 · 0 评论 -
空指针调用成员函数的场景
当对一个空指针调用成员函数时,this指针的值为nullptr。printName函数需要通过this指针查找name成员,但是此时this==nullptr,无法定位和访问name变量,因此会出错。C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针,如果用到this指针,需要加以判断保证代码的健壮性。原因在于成员函数隐含地通过this指针来访问对象,如果this指针为空,就无法正常完成成员函数的执行。空指针可以调用成员函数,但是如果成员函数中用到了this指针就不可以了,为什么?原创 2023-12-07 23:19:36 · 422 阅读 · 0 评论 -
C++ list容器讲解 全网最详细!!!!
List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的。(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于。**功能:**将数据进行链式存储。结点的组成:一个是存储数据元素的。STL中的链表是一个双向循环链表。,另一个是存储下一个结点地址的。链表的组成:链表由一系列。原创 2023-12-16 14:13:34 · 384 阅读 · 0 评论 -
C++函数返回引用可以启用连续操作和链式调用的一个典型场景
C++函数返回引用可以启用连续操作和链式调用的一个典型场景;为什么返回对象本身需要用return *this原创 2023-12-07 22:33:28 · 458 阅读 · 0 评论 -
C++ queue容器讲解 全网最详细!!!!
(First In First Out,FIFO)的数据结构,它有两个出口。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。队列容器允许从一端新增元素,从另一端移除元素。功能描述:栈容器常用的对外接口。队列中进数据称为 —队列中出数据称为 —queue 基本概念。原创 2023-12-14 10:00:31 · 395 阅读 · 0 评论 -
C++ string容器功能,全网最详细!!!先码住!慢慢看
总结:字符串对比主要是用于比较两个字符串是否相等,判断谁大谁小的意义并不是很大。总结:string字符串中单个字符存取有两种方式,利用 [ ] 或 at。**总结:**灵活的运用求子串功能,可以在实际开发中获取有效的信息。总结:string的多种构造方式没有可比性,灵活使用即可。总结:字符串拼接的重载版本很多,初学阶段记住几种即可。**总结:**插入和删除的起始下标都是从0开始。string中单个字符存取方式有两种。 string的赋值方式很多,这种方式是比较实用的。原创 2023-12-12 10:45:50 · 423 阅读 · 0 评论