自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux杂项知识2

线程安全是为了确保多线程访问共享资源时,程序的行为和结果是可预期的。通过使用同步机制(如互斥锁、读写锁、原子操作等),我们可以防止竞态条件、数据不一致和其他多线程并发问题。

2024-09-13 19:47:49 514

原创 Linux杂项知识

BIOS/UEFI→引导加载程序(GRUB)→Linux 内核→启动服务→用户登录界面→用户会话。

2024-09-13 17:15:06 1201

原创 C++ IO流

头文件提供的一个非常有用的类,它允许字符串对象像流(stream)一样被操作。是 C++ 中用于输出文件操作的一个类,它可以创建新文件用于写入或者向已存在的文件写入数据。:这是最常用的向文件写入数据的方法。对象时,可以通过第二个参数指定文件打开的模式,例如仅读、仅写、读写等。成员函数获取流当前的字符串值,或者将一个新的字符串值分配给流。是 C++ 中处理文件输入输出操作的一个类,属于标准库中的。对象被销毁时自动关闭,但显式关闭文件是一个好习惯。头文件中定义的一部分,是用于处理文件输出流的。

2024-05-17 15:36:52 1058

原创 C++ 特殊类设计

拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个。就是说不管你将来用不用,程序启动时就创建一个唯一的实例对象。只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。构造函数私有化,派生类调不到基类的构造函数,无法继承。访问它的全局访问点,该实例被所有程序模块共享。只能创建一个对象的类(单例模式)

2024-05-17 14:47:32 321

原创 C++ 智能指针

循环引用是指两个或多个对象之间形成了一个引用循环,从而导致它们不能被正常回收释放,这通常出现在使用智能指针进行内存管理时。特别是在使用。

2024-05-17 14:09:37 673

原创 C++ 11

对于类类型,如果定义了接受。

2024-05-17 13:26:14 756

原创 C++ 类型转换

C++中有四种强制类型转换(Cast)运算符,每种转换运算符在不同场景下有不同用途,了解它们的特点有助于选择最合适的转换方式。是最常用的类型转换操作,用于在相关类型之间进行转换,例如将float转换为int。它也可用于类层次结构中基类和子类之间的转换,但只限于没有虚函数的情况下,即不涉及多态。在编译时检查转换的有效性,如果转换不合法,则会报编译错误。: 通用类型转换,数值类型之间、指针类型之间、基类和子类之间的转换。

2024-05-17 12:22:02 941

原创 C++ 异常

C语言很多标准库函数在遇到错误时都会返回一个特定的错误码或NULL,通过这个错误码来判断错误信息。C语言在<errno.h>头文件中定义了一个名为errno的全局变量,它在系统调用和某些库函数遇到错误时被设置成一个错误码,以指示具体的错误类型。errno的值是整数,每个值对应不同的错误。通过检查errno的值,可以得知错误的具体原因。通常,执行一个系统级函数或库函数之后,立即检查errno来判断是否发生了错误。

2024-05-17 10:02:30 556

原创 C++ 多态

1.虚函数重写 (只有虚函数才能被覆盖或重写)2.父类指针或引用去调用虚函数。

2024-05-16 14:14:52 626

原创 C++ 继承

在实际的编程实践中,“优先使用组合而非继承”是一个通常的设计原则。这种做法能够最小化类之间的耦合,提高代码的复用性和可维护性。当然,这并不是说继承是有害的,恰当的使用继承能够带来很多便利。但是我们需要清楚,在什么情况下使用继承,什么情况下使用组合,这对于我们来说是非常重要的。

2024-05-16 11:27:20 689

原创 C++ 模板

如果标准转换也不行,编译器会尝试所有用户定义的转换。

2024-05-16 09:07:54 704

原创 C++ STL概念之 仿函数(函数对象)/ 空间配置器 / 适配器 / 理解STL

仿函数,或称为函数对象,在C++中是通过重载operator()的类实例,使得类的实例能够像函数一样被调用。

2024-05-16 07:58:10 772 1

原创 C++ STL概念之 算法

这个版本允许用户指定一个自定义比较函数或函数对象comp,而不是使用默认的操作符。这使得用户可以定义更复杂的排序逻辑。比如,可以根据元素的某个特定字段进行查找,或使用不同于默认的比较规则。这个版本允许用户通过comp参数提供一个自定义的比较函数,以便在比较元素时使用。这让用户可以自定义元素比较的规则,而不是仅依赖于元素类型的操作符。如果元素类型是自定义的,或者需要按不同于默认操作符的方式来比较元素,这个版本就特别有用。这个版本与默认版本相似,但给用户提供了一个comp。

2024-05-15 22:53:11 1121

原创 C++ STL概念之 迭代器

迭代器失效,顾名思义,就是迭代器无效的情况。如果一个迭代器无法正确引用一个元素(比如元素已经被删除)或者迭代器的行为无法预知(如在迭代的过程中容器发生改变),我们就说这个迭代器已经失效。

2024-05-15 15:46:50 548

原创 C++ STL概念之 序列式容器4(bitset / array / forward_list / deque)

用于序列中的一位或所有位设置为1。这个版本将位序列中的所有位都设为1。这个版本能够设置位序列中的指定位。参数pos为我们想要设置的位的位置,参数val是设定的值,如果不提供val参数,默认将位设置为1。如果提供了val参数并且其值为false,则将指定位设为0。

2024-05-15 15:02:20 830

原创 C++ STL概念之 序列式容器3(string)

=运算符接受右侧的字符串,并将其内容附加到左侧字符串的末尾。左侧的字符串需要是一个对象,而右侧可以是对象、字符数组、字面量字符串或单个字符。使用+=运算符进行字符串连接的操作比使用运算符更高效,因为它避免了不必要的临时字符串对象的创建。+=+=+=+=

2024-05-15 14:32:45 691

原创 C++ STL概念之 序列式容器2(stack / queue / priority_queue)

***这个版本的push方法接受一个对现有对象的常量引用作为参数。它是传统的推入方法,适合在你已经有一个对象,并想要将其加入到栈中时使用。在这个方法中,传入的参数val被视为一个左值,意味着在推入栈之前,会发生一次复制操作。这是因为栈管理其内容的副本,而不是直接管理原始对象。****这个版本的push方法接受一个右值引用作为参数,允许使用移动语义。如果你有一个即将销毁的临时对象,或者你希望将一个对象转移进栈中以避免复制开销,这个方法更合适。

2024-05-15 11:50:32 626

原创 C++ STL概念之 序列式容器1(vector / list)

push_back有两种重载方式一、 参数是一个vector 存储类型的元素二、 参数是一个vector 存储类型的右值元素,是右值类型的重载版本,用于向容器移动右值(临时对象),而不是复制。

2024-05-15 11:00:31 650

原创 C++ STL概念之 关联式容器2(unordered_map/unordered_set)

(2):这是一个移动插入,P是哈希map的的键值对类型, P&&是一个右值类型,可以将临时对象或可移动的对象传给insert。这对于性能优化很有用,因为它允许通过避免复制键来直接构造或移动键,在某些情况下这可以减少内存分配。(1):允许使用一个mapvalue类型(哈希map的键值对)的参数向哈希map中插入元素。哈希set和哈希map都是这些方法,但是哈希set的右值引用版本的类型是value(key)是一个常量引用,表示要访问或插入的键。是一个右值引用,表示要访问或插入的键。当你想要根据一个给定的键(

2024-05-13 19:51:10 794

原创 C++ STL 概念之 关联式容器1(map/set)

STL,全称Standard Template Library(标准模板库),是C++标准库的重要组成部分。从容器开始逐个描述。

2024-05-06 23:10:28 472 2

原创 C++内存分布

图中描绘得很清楚,调用operator new申请空间在申请的空间上调用构造函数,完成对象的初始化。

2024-05-05 23:21:13 1023 1

原创 C++类和对象3

三、尽量使用初始化列表对成员进行初始化:1、对于内置类型,使用初始化列表没影响2、对于自定义类型,使用初始化列表可以提高效率 ,因为初始化列表在许多情况下允许直接初始化成员变量,而不是先默认初始化再赋值。这样可以省去不必要的构造和析构的过程,直接构造为目标值省去了中间步骤。四、

2024-05-04 23:20:35 176

原创 C++类和对象2

名字和类名相同,创建类型对象时,由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。

2024-05-03 23:04:25 250

原创 C++类和对象1

这是两种编程范式,有不同的思考方式和方法。

2024-05-01 23:04:53 168

原创 C++基础概念2

引用不是定义一个变量,而是给一个已经存在的变量取一个别名,它和它的变量共用一块内存空间。

2024-04-30 22:56:35 198

原创 C++基础概念1

命名空间就是定义了一个作用域,在这个作用域的所有内容都局限于这个命名空间中。命名空间可以在另一个命名空间之中嵌套声明,但不能声明在类和代码块中。

2024-04-29 22:57:08 254

原创 冒泡、选择排序

没什么 好说的。。。记录一下曾经写的练习代码。

2024-04-28 23:05:53 91

原创 快速排序及其实现

用tem和cur标定比基准值小的和目前的排序目标,进行比对,小的放在序列左边,大的放在左边小序列的右边,因为选取的是用第一个数作为基准值,所以先不移动基准值。排好序后,将tem指向的数:也就是比基准值小的最右边的数,和基准值left交换,这样就完成了基准值左边得数都比他小,右边的数都比他大的操作了。从序列中选择一个数当做基准值,选择放法很多,比如取第一个、最后一个或中间的值。将序列中所有比基准值小的数移动到基准值左边,比基准值大的移动到基准值的右边。接着将基准值两边的序列进行递归排序,最终完成排序。

2024-04-22 22:32:32 212 1

原创 归并、计数排序

在数据不大的情况下,也就是k值较小的情况下,基数排序可以做到O(n)的时间复杂度。将数据转换成键值存储到一个临时数组中,找到最大值和最小值确定临时数组的长度。但是缺点也很明显,在大数据范围或数据离散程度很大的情况性能就会极大下降。归并排序是 一种分治思想的排序。将数组分为两半且递归的应用归并排序。计数排序是O(n+k)的排序方法,k指的是数据的范围。在最坏、平均、最好的情况下都是O(n log n)计数排序不是常规的比较算法,思想上是一种映射,然后临时数组中存储的数据就是该值出现的次数。

2024-04-21 23:21:23 214 1

原创 堆排序原理及实现

2.取出最大(或最小)元素,然后经过调整算法调整堆,每次调整的时间复杂度是。可以这样 分析:1. 首先建堆,时间复杂度为O(n)利用堆本身数据结构的性质来做到大堆升序小堆降序的。堆排序的时间复杂度是稳定的O(n log N)所以堆排序的时间复杂度是O(n log N)之前有提到堆的结构,这里不在赘述。O(log n) 而调整次数是n。

2024-04-20 22:45:46 124

原创 排序——插入排序和希尔排序

插入排序很简单,大致思路就是给一个空数组,每向空数组添加一个数字就向前挨个遍历排序,时间复杂度O(N^2)希尔排序是插入排序的一种改进,核心思想是比较距离较远的数据来交换,使数组逐渐有序,因为分割了数组 ,使数据交换次数变少,效率比插入排序高。但是希尔排序是不稳定的排序,因为相同的数据的相对位置会发生变化。而插入排序不会。

2024-04-17 22:02:30 167

原创 C语言二叉树

【代码】C语言二叉树。

2024-04-13 22:46:26 115

原创 C语言实现堆

我们在插入的时候会用到向上调整,先将要插入的元素存放在数组末尾,然后向上调整,需要注意的是。相应的,向下调整是在删除是用到。所以小堆的堆顶,也就是根节点数据最小,大堆相反,根节点数据最大。,要理解清楚才好下手。

2024-04-12 22:56:42 228

原创 C语言实现队列

【代码】C语言实现队列。

2024-04-09 22:55:26 84

原创 栈的简易实现

结构体中有动态开辟的栈类型数据、栈顶下一个元素下标、容量。

2024-04-08 22:39:47 213

原创 带头双向循环链表

7.尾插节点(实际上就是复用了插入节点)

2024-04-07 22:50:48 145

原创 单链表的实现

实现的是一个单向链表。

2024-04-06 23:39:59 117 1

原创 顺序表增删查改

顺序表的增删查改,比较简单,需要注意的就是在中间插入和删除时要注意保持数组的连续性防止越界。

2024-04-05 22:54:10 207 1

原创 找袜子(异或运算)

然后再以这一位 为0还是为1把数组分成两组分别异或,这样得到的最后数字就是两个只出现一次的数字(出现两次的数字必定被分在同一组)但是本题经过一次遍历之后,ret的结果中是两个不同数字异或的结果。num1 和num2就是数组中不同的两个数。我们知道异或运算会抵消出现两次的数字。如何将他们分离出来呢?

2024-04-05 10:15:03 307 1

原创 消失的数字

通过异或的特性找到一个有序数组中缺失的一个数字。

2024-04-03 22:14:03 140 1

空空如也

空空如也

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

TA关注的人

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