C++基础笔记
巩固基础
计算机内卷的N天
C++程序员一枚,持续更新,分享我的学习笔记,做到厚积薄发
展开
-
DDS通信协议
它提供了以数据为中心的连接服务,基于发布者-订阅者模型。总体而言,DDS 提供了一种简便而强大的方式,让不同的设备和软件系统在实时、高效、可靠的环境中进行数据通信,使得各个部分协同工作,实现复杂的实时系统。设备或应用程序可以作为发布者发布数据,而其他设备或应用程序可以作为订阅者订阅并接收这些数据。QoS(Quality of Service): DDS 允许根据应用程序的需求配置数据传输的质量,包括可靠性、实时性、持久性等方面的参数。数据主题(Topic): 数据主题定义了要发布或订阅的数据的类型和结构。原创 2024-02-25 20:07:56 · 540 阅读 · 0 评论 -
快排是否稳定,为什么不稳定?
具体来说,当选择枢轴元素时,如果是不稳定的选择方式(例如选择第一个或最后一个元素作为枢轴),那么在分区的过程中,相同元素的相对位置可能会被打乱。另外,如果在分区过程中采用了不稳定的交换策略(比如直接交换而不是插入到合适位置),也会导致快速排序的不稳定性。快速排序(Quicksort)是一种不稳定的排序算法。其不稳定性主要来自在分区过程中对元素的交换操作。在快速排序的过程中,相同元素的相对位置可能会发生变化,导致最终排序结果中相同元素的顺序与初始顺序不同。原创 2024-03-05 12:28:16 · 233 阅读 · 0 评论 -
MySQL主键索引的特点
3. **默认聚集索引**:在 InnoDB 存储引擎中,主键索引默认是聚集索引。5. **隐式约束**:主键索引在逻辑上也是一种约束,确保数据的完整性和一致性。7. **自动生成**:主键可以手动指定也可以自动生成。1. **唯一性**:主键索引要求列的值必须是唯一的,即该索引列中的每个值必须是唯一的,不允许重复值出现。4. **快速查找**:通过主键索引可以快速定位到表中唯一的一条记录,加快数据检索的速度。2. **非空性**:主键索引列的值不能为 NULL,确保每行数据都有一个唯一的标诋符。原创 2024-03-05 12:50:59 · 188 阅读 · 0 评论 -
聚集索引和非聚集索引区别
总的来说,聚集索引将数据行存储在索引的叶子节点中,减少了数据检索时的IO操作,可以提高查询性能;而非聚集索引只存储索引值和指向数据行的指针,需要额外的IO操作来获取数据行,但可以加速多种不同列的查询。- 聚集索引的叶子节点存储了表中的实际数据行,而不只是索引值。换句话说,表的物理顺序和聚集索引的顺序是一致的。- 非聚集索引的叶子节点存储的是索引字段的值以及指向实际数据行的指针。即索引值和数据行是分开存储的。- 当按照聚集索引的列进行查询时,数据库引擎会按照索引的顺序直接定位到数据行,提高查询效率。原创 2024-03-05 12:59:00 · 198 阅读 · 0 评论 -
什么情况下导致索引失效
索引在数据库中起着加快数据检索速度的作用,但在某些情况下,索引可能会失效,即数据库系统无法有效地使用索引来加速查询。- 当查询条件中未使用索引列,或者对索引列进行了函数操作、类型转换等,数据库无法有效使用索引。- 如果索引列上的数据分布不均匀,某些值的重复率很高,数据库可能会放弃使用索引而进行全表扫描。= 等),会导致索引失效。- 当查询条件中的数据类型与索引列的数据类型不匹配时,索引也可能无法被使用。- 在多表连接查询中,如果连接条件的列没有索引,可能会导致索引失效。原创 2024-03-05 13:06:44 · 503 阅读 · 0 评论 -
ab二个字段都有索引,会导致索引失效吗?
1. 覆盖索引:如果其中一个索引是覆盖索引(Covering Index),即索引包含了查询所需的所有列,而另一个索引并不包含所有需要的列,数据库可能会选择使用覆盖索引而不使用第二个索引。3. 索引合并:有些数据库系统支持索引合并(Index Merge),即在某些情况下会将多个单列索引合并使用,但并非所有数据库都支持这种特性。当两个字段都有各自的索引时,一般情况下不会导致索引失效。在大多数情况下,如果两个字段都有索引,数据库系统会根据查询条件和统计信息来选择最优的索引来加速查询,而不会导致索引失效。原创 2024-03-05 13:10:34 · 268 阅读 · 0 评论 -
C++之析构函数
在 C++ 中,析构函数(Destructor)是一个特殊的成员函数,用于在对象生命周期结束时执行清理工作和资源释放。析构函数的名称与类名相同,前面加上波浪号(~),不接受任何参数,也没有返回类型。在上面的示例中,当对象 `obj1` 和 `obj2` 超出作用域时,析构函数会被自动调用,输出相应的信息。这样可以确保在对象销毁时进行必要的清理工作,比如释放动态分配的内存、关闭文件等。需要注意的是,C++ 中如果一个类有指针成员或者需要手动管理资源,那么最好显式地定义析构函数来确保资源的正确释放。原创 2024-03-05 13:16:49 · 252 阅读 · 0 评论 -
虚函数和纯虚函数
在 C++ 中,虚函数(Virtual Function)和纯虚函数(Pure Virtual Function)是面向对象编程中的重要概念,用于实现多态性和抽象类。- 包含纯虚函数的类称为抽象类(Abstract Class),不能被实例化,只能作为基类来派生其他类。- 虚函数是在基类中声明为虚拟的成员函数,可以被子类重写。- 纯虚函数是在基类中声明为纯虚拟的虚函数,没有具体的实现,在基类中只有声明,不需要定义函数体。- 使用纯虚函数可以定义抽象接口,强制派生类实现特定的函数,实现接口的统一规范。原创 2024-03-05 13:33:01 · 205 阅读 · 0 评论 -
Linux常见命令
注意:常用 rm –rf XXX,千万不能执行rm –rf / ,否则它会把你的系统文件全部删除,非常危险!tail还有一个重要的作用是用来显示文件中,实时新增的内容,方法如下:tail -f xxx。路径的写法一定由根目录 ‘/’写起,例如/usr/local/net-snmp.常用选项:-r 递归,复制子文件和子目录,一般用在复制目录。选项来查看帮助,例如:ls --help。常用选项:-b 显示行号,空白行不显示行号。搜索系统命令的命令,查找二进制命令,源文件和帮助文档的命令。原创 2024-02-29 14:02:14 · 853 阅读 · 0 评论 -
C++内存四区
的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。全局区还包含了常量区, 字符串常量和其他常量就是存放在常量区的。代码区用于存放二进制的 CPU 执行的机器指令。的,使其只读的原因是防止程序意外地修改了它的指令。该区域的数据在程序结束后由操作系统释放.C++程序在执行时,将内存大方向划分为。系统分为两个区域:代码区和全局区。在程序编译后,会生成可执行程序,不同区域存放的数据,赋予不同的。全局变量和静态变量存放在此。, 给我们更大的灵活编程。原创 2024-02-28 16:05:28 · 253 阅读 · 0 评论 -
学会C语言指针(破解版)
CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。使用指针变量之前一定要初始化,否则就不能确定指针指向哪里,如果它指向的内存没有使用权限,程序就崩溃了。指针变量的加减运算并不是简单的加上或减去一个整数,而是跟指针指向的数据类型有关。给指针变量赋值时,要将一份数据的地址赋给它,不能直接赋给一个整数,例如。是没有意义的,使用过程中一般会导致程序崩溃。原创 2023-06-11 15:27:18 · 67 阅读 · 0 评论 -
C语言常见的函数及用法
比如:x表示需要计算平方根的数值。sqrt函数会返回x的正平方根,如果x是负数,则返回NaN(Not a Number)。exp用于计算一个数的自然指数值(以e为底的指数)。log函数返回x的自然对数,即ln(x)。原创 2023-06-11 15:00:26 · 1218 阅读 · 0 评论 -
C语言快速入门之复习(大集篇一)
1.在C语言中,有多个函数可以从键盘获得用户输入:scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。格式:scanf("%d”,&a)注意变量前面加个&地址符。getchar()、getche()、getch():这三个函数用于输入单个字符。getche(),getch()没有缓冲区,输入立即读取,不用按回车键,getch()在输入密码时很有必要,他们都在头文件conio.h。gets():获取一行数据,并作为字符串处理。get能读取含空格的字符串,而scanf不能。原创 2023-06-11 13:29:40 · 65 阅读 · 0 评论